C语言宏

     宏前边平日不带标点符号;

在这种情况下:(x) ((x) – 1) 等价于 (int) ((int) – 1)

     前面出现参数对地点应当要用“()”括起来;整个宏用“()”括起来;

(3)宏不是类型定义:

宏的写法:宏名要大写;宏参不带项目;

 

     <例:#define MAX>=:>

从概念上看,T1和T2的定义上完全符同,都是指向了foo的指针。不过,当大家准备利用它们来声称四个变量时,就能够产出难题:

宏的成效:宏调用不会生出中断,直接在当前的地点举办 。

(2)宏不是函数,需保护括号的行使:

#define NEWTYPE struct newType  NEWTYPE a;  NEWTYPE b,c;

(1)不可小视宏定义中的空格:

(1) 文件包蕴:能够把源程序中的#include
扩充为文件正文,即把带有的.h文件找到并扩充到#include 所在处。
(2)
条件编写翻译:预管理器依据#if和#ifdef等编写翻译命令及其后的原则,将源程序中的某部分含有进来或解除在外。
(3) 宏进行:预管理器将源程序文件中出现的对宏的援用张开成对应的宏定义。

#define abs(x) x > 0 ? x : -x //正确使用:#define abs(x) (((x)>0) ? (x) : (-x))
#define f (x) ((x)-1)
#define T1 struct foo*  typedef struct foo *T2;

宏有有三种定义格式:
(1) 简单的宏定义:#define <宏名> <字符串>                  
               //对应宏成效1

我们只必要转移一行代码,就足以转移a,b,c的花色,宏的这种用法有三个稍微:可移植性,得到了颇具C编写翻译器的支撑,可是,大家最棒或然用typedef来定义:

 答案三种:f(x) = ((x) – 1) 恐怕 f=(x)  ((x)-1)

 

对于宏的教师甘休,让大家向后看看 宏应该注意的地点(1)

  例子:上边宏定义中 f 是不是带了一个参数?

里头预管理器专门的职业有:

图片 1

 

故而,使用类型定义的时候,大家Infiniti不要使用宏,应该采用typedef。

宏应该注意的地点:

 

  本文首要解说《C陷阱与缺欠》第六章中宏的施用。


看上面代码:

发表评论

电子邮件地址不会被公开。 必填项已用*标注