宏定义

C语言宏定义相关

[亡魂溺海] 提交于 2019-12-29 01:19:01
写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 等等。下面列举一些成熟软件中常用得宏定义。。。。。。 1,防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDEF_H //头文件内容 #endif 2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。 typedef unsigned char boolean; /* Boolean value type. */ typedef unsigned long int uint32; /* Unsigned 32 bit value */ typedef unsigned short uint16; /* Unsigned 16 bit value */ typedef unsigned char uint8; /* Unsigned 8 bit value */ typedef signed long int int32; /* Signed 32 bit value */ typedef signed short int16; /* Signed 16 bit value */ typedef signed char int8; /* Signed 8 bit value */ //下面的不建议使用 typedef

Unity 平台相关宏定义

孤人 提交于 2019-12-29 01:18:18
Platform Defines Macros The platform defines that Unity supports for your scripts are: UNITY_EDITOR Define for calling Unity Editor scripts from your game code. UNITY_STANDALONE_OSX Platform define for compiling/executing code specifically for Mac OS (This includes Universal, PPC and Intel architectures). UNITY_DASHBOARD_WIDGET Platform define when creating code for Mac OS dashboard widgets. UNITY_STANDALONE_WIN Use this when you want to compile/execute code for Windows stand alone applications. UNITY_STANDALONE_LINUX Use this when you want to compile/execute code for Linux stand alone

UI控件相关宏定义

一笑奈何 提交于 2019-12-29 01:17:46
1、显示设置 1.1 view圆角和边框 /** 设置view圆角和边框 */ #define kViewBorderRadius(View, Radius, Width, Color)\ \ [View.layer setCornerRadius:(Radius)];\ [View.layer setMasksToBounds:YES];\ [View.layer setBorderWidth:(Width)];\ [View.layer setBorderColor:[Color CGColor]] 1.2 设置加载提示框 1.2.1 第三方框架:Toast /** 第三方框架:Toast */ #define kToast(str) CSToastStyle *style = [[CSToastStyle alloc] initWithDefaultStyle]; \ [kWindow makeToast:str duration:0.6 position:CSToastPositionCenter style:style];\ kWindow.userInteractionEnabled = NO; \ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.6 * NSEC_PER_SEC)),

常用宏定义 - 系统相关

给你一囗甜甜゛ 提交于 2019-12-29 01:17:15
/** 是否iPad */ #define isPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) /** 是否iPad */ #define someThing (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)? ipad: iphone /** 获取系统版本 */ #define IOS_VERSION [[UIDevice currentDevice] systemVersion] floatValue] #define CurrentSystemVersion [UIDevice currentDevice] systemVersion] /** 获取当前语言 */ #define CurrentLanguage ([NSLocale preferredLanguages] objectAtIndex:0]) /** 判断是否 Retina屏、设备是否%fhone 5、是否是iPad */ #define isRetina ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [UIScreen

5月5日学习收获

六眼飞鱼酱① 提交于 2019-12-26 13:57:03
波特率:单片机或计算机在串口通信时的速率,指信号被调制后在单位时间内的变化,即单位时间内载波参数变化的次数,如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为240Bd,比特率为10位×240个/秒=2400bps。 delay函数:在C语言中,该函数一般是自己定义的一个延时函数。 GPIO(General Purpose Input Output):通用输入输出,另称总线扩展器,是利用工业标准I2C、SMBus或SPI接口简化了的I/O口,简而言之,就是每个GPIO端口可通过软件进行配置,决定其是输入还是输出端口。 GPIO库: gpio管脚:一个io管脚,这个管脚可以有多个配置。在库函数中用GPIO_PIN_1这样的宏定义表示。 gpio端口:在库函数中用宏定义GPIOA、GPIOB等表示。 1、gpio库说明 库文件名:stn32f4xx_gpio.c 使用该驱动的方法: (1)使用RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx,ENABLE)函数使能gpio的AHB总线时钟。 (2)使用GPIO_Init()函数对每个引脚进行四种可能的配置: 《1》输入状态:Floating(浮空)、Pull-up(上拉)、Pull-down(下拉) 《2》输出状态:Push-Pull(上拉下拉)

宏定义和内联函数区别

ぃ、小莉子 提交于 2019-12-26 06:13:14
   内联函数是代码被插入到调用者代码处的函数。如同 #define 宏,内联函数通过避免被调用的开销来提高执行效率,尤其是它能够通过调用(“过程化集成”)被编译器优化。 宏定义不检查函数参数,返回值什么的,只是展开,相对来说,内联函数会检查参数类型,所以更安全。   内联函数和宏很类似,而区别在于,宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。而且内联函数是真正的函数,只是在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的开销。你可以象调用函数一样来调用内联函数,而不必担心会产生于处理宏的一些问题。   声明内联函数看上去和普通函数非常相似: void f(int i, char c);   当你定义一个内联函数时,在函数定义前加上 inline 关键字,并且将定义放入头文件: inline void f(int i, char c) { // ... } 任何在类的说明部分定义的函数都会被自动的认为是内联函数。 内联函数必须是和函数体申明在一起,才有效。像这样的申明Inline Tablefunction(int I)是没有效果的,编译器只是把函数作为普通的函数申明,我们必须定义函数体。 Inline tablefunction(int I) {return I*I}; 这样我们才算定义了一个内联函数

C++内联函数与宏定义

一曲冷凌霜 提交于 2019-12-26 06:12:40
用内联取代宏: 1.内联可调试; 2.可进行类型安全检查或自动类型转换; 3.可访问成员变量。 另外,定义在类声明中的成员函数自动转化为内联函数。 文章(一) 内联函数与宏定义   在C中,常用预处理语句#define来代替一个函数定义。例如:     #define MAX(a,b) ((a)>(b)?(a):(b))   该语句使得程序中每个出现MAX(a,b)函数调用的地方都被宏定义中后面的表达式((a)>(b)?(a):(b))所替换。   宏定义语句的书写格式有过分的讲究, MAX与括号之间不能有空格,所有的参数都要   放在括号里。尽管如此,它还是有麻烦:     int a=1,b=0;     MAX(a++,b); //a被增值2次     MAX(a++,b+10); //a被增值1次     MAX(a,"Hello"); //错误地比较int和字符串,没有参数类型检查     MAX( )函数的求值会由于两个参数值的大小不同而产生不同的副作用。     MAX(a++,b)的值为2,同时a的值为3;     MAX(a++,b+10)的值为10,同时a的值为2。   如果是普通函数,则MAX(a,"HellO")会受到函数调用的检查,但此处不会因为两个参数类型不同而被编译拒之门外。幸运的是,通过一个内联函数可以得到所有宏的替换效能和

内核中的宏定义__init、__initdata和__exit、__exitdata

好久不见. 提交于 2019-12-25 01:54:15
__init、__initdata和__exit、__exitdata的定义位于<kernel/include/linux/init.h> 1 /* These are for everybody (although not all archs will actually 2 discard it in modules) */ 3 #define __init __section(.init.text) __cold notrace 4 #define __initdata __section(.init.data) 5 #define __initconst __constsection(.init.rodata) 6 #define __exitdata __section(.exit.data) 7 #define __exit_call __used __section(.exitcall.exit) 8 9 10 #define __exit __section(.exit.text) __exitused __cold notrace 11 12 /* For assembly routines */ 13 #define __HEAD .section ".head.text","ax" 14 #define __INIT .section ".init.text",

宏定义中#和##的用法

本小妞迷上赌 提交于 2019-12-24 14:01:23
转载:https://blog.csdn.net/baidu_33850454/article/details/79363033 1. 前言 使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起. 2. 一般用法 #include<cstdio> #include<climits> using namespace std; #define STR(s) #s #define CONS(a,b) int(a##e##b) int main() { printf(STR(vck)); // 输出字符串"vck" printf("%d\n", CONS(2,3)); // 2e3 输出:2000 return 0; } 3. 注意事项 当宏参数是另一个宏的时候,需要注意的是凡宏定义里有用’#’或’##’的地方宏参数是不会再展开. 即, 只有当前宏生效, 参数里的宏!不!会!生!效 !!!! 3.1 举例 #define A (2) #define STR(s) #s #define CONS(a,b) int(a##e##b) printf("int max: %s\n", STR(INT_MAX)); // INT_MAX #include<climits> printf("%s\n", CONS(A, A)); // compile error --- int(AeA)

c语言中ifndef和endif的用法

人盡茶涼 提交于 2019-12-24 10:52:34
#ifndef x //if not define的简写    #define x   ...  #endif   这是 宏 定义的一种,它可以根据是否已经定义了一个 变量 来进行分支选择,一般用于调试等等.实际上确切的说这应该是预处理功能中三种(宏定义,文件包含和 条件编译 )中的一种----条件编译。 C语言在对程序进行编译时,会先根据 预处理命令 进行“预处理”。C语言 编译系统 包括预处理,编译和链接等部分。    #ifndef x //先测试x是否被宏定义过    #define x   程序段1 //如果x没有被宏定义过,定义x,并 编译程序 段1    #endif   程序段2 //如果x已经定义过了则编译程序段2的语句,“忽视”程序段1。   条件指示符#ifndef 的最主要目的是防止 头文件 的重复包含和编译。了解:条件编译当然也可以用条件语句来实现。 但是用条件语句将会对整个 源程序 进行编译,生成的 目标代码 程序很长,而采用条件编译,则根据条件只编译其中的 程序段 1或程序段2,生成的 目标程序 较短。如果条件选择的程序段很长,采用条件编译的方法是十分必要的。   #ifndef 标示1 //判断"标示1"是否定义,如果被定义则返回假,如果没有被定义则返回真。      语句1 #ifndef 标示1   语句2 #define 标示1   语句3