C编程语言Tutorial-Page4
参考以下页面导航完成C教程。
C语言page1
所以page2 C语言
C语言page3
C语言page4
C语言page5
宏定义
•一个宏是一个代码片段,有一个名字。当使用这个名字,取而代之的是宏观的内容。
•这替换是由c预处理器
•有两种类型的宏。他们的主要区别在于它们是什么样子,什么时候使用它们。
•对象宏类似数据对象时使用
•函数宏和函数调用
•宏是用来替代重复的值,或者片段代码不能使函数;或将它们转换为一个函数可能是昂贵的。
宏对象宏
•一个对象宏是一个简单的代码片段标识符将被替换。它被称为对象,因为它看起来就像一个数据对象的代码中使用它。他们是最常用的符号名称给数字常量。
•# define BUFFER_SIZE 1024定义一个宏1024名为BUFFER_SIZE作为令牌的缩写。
•如果某个地方后的# define指令有一个C语句的形式
foo = (char *) malloc (BUFFER_SIZE);
然后C预处理器将识别和扩大宏观BUFFER_SIZE。C编译器会看到同样的令牌将如果你写了
foo = (char *) malloc (1024);
•按照惯例,宏名用大写字母写的。程序易于阅读时可以一眼看出宏的名称。
宏观的身体结束结束时#定义的线。你可以继续定义多个行,如果有必要,使用backslash-newline。当宏扩展,然而,它都在一行上。
例如,
#定义数字1,\
2,\
3 int x[] ={数字};= = > int x [] = {1,2,3};
记住,不应该有任何空间的尽头\
当你继续宏在多个行。
C预处理程序按顺序扫描程序。宏定义在你写的地方生效。因此,下面的C预处理器的输入
foo = X;
#定义X 4
酒吧= X;
生产
foo = X;酒吧= 4;
什么将在以下项目x的值。
#定义BUFSIZE (1020)
#定义TABLESIZE (BUFSIZE)
# undef BUFSIZE
#定义BUFSIZE (37)
int主要(空白)
{
int x = TABLESIZE;
printf (" x = % d \ n ");
}
宏-函数宏
函数宏可以带参数,就像真正的功能。定义一个宏,使用参数,您插入参数之间的一对括号的宏定义,使宏观功能。必须有效的C参数标识符,由逗号分隔和可选的空白。
#定义最小值(X, Y) ((X) < (Y) ?(X): (Y))
x = MIN (a, b);< = = > x = ((a) (b) ?(一):(b));
y = MIN (1、2);= = > y = ((1) < (2) ?(1):(2));
z = MIN (* p + 28日);= = > z = ((a + 28) < (* p) ?(+ 28):(* p));
宏连接
通常很有用合并两个标记成一个在扩大宏。这被称为令牌粘贴或令牌连接。“# #”预处理算子执行标记粘贴。宏扩展时,两边的两个标记每个“# #”操作符被组合到一个令牌,然后取代了“# #”和宏扩展两个原始的令牌。
Typedef定义并使用
一个类型定义声明允许您定义自己的标识符,可以使用的类型说明符如int,浮动,双。typedef声明不储备存储。名字你不使用typedef定义新的数据类型,但同义词所代表的数据类型的数据类型或组合。
对象时使用typedef定义标识符,定义对象的属性一模一样,如果对象被显式地定义清单与标识符相关联的数据类型。
这意味着typedef unsigned char uint8;uint8 abcd;无符号字符abcd;都是一样的
typedef允许用户定义数据类型,他们想要的东西。
使用typedef可以使代码更容易阅读,也更容易港口新机器。但是没有创建新的物理数据类型。