K&R之初始化&宏调用

初始化

在不进行显示初始化的情况下,外部变量和静态变量都将被初始化为0,自动变量和寄存器变量的初始值为无用信息

对于外部变量的静态变量其初始化表达式必须是常量表达式

对于自动变和寄存器变量来说初始化表达式可以不是常量表达式,表达式中可以包含任意在此表达式之前已经定义的值,包括函数调用

宏调用:

宏替换对在括号中的字符串不起作用

如 #define YES 123

宏替换对引号中的字符串不起作用

如printf("YES");

输出的不是123,而是YES;

宏定义可以带参数,如

#define max(A,B) ((A) > (B) ? (A) : (B))

x = max(p+q, r+s)

将被替换成:x = ((p+q) > (r+s) ? (p+q) : (r+s));

例子:

#define square(x)  x * x

当调用square(z+1)时就会出错

变为z+1 * z +1

因此应该这样定义

#define square (x) (x) * (x)

 #undef

#undef 指令取消名字的宏定义,可以使后续的调用是函数调用,而不是宏调用

#undef  getchar

int getchdar(void){.....}

条件包含

#if语句对常量整型表达式求值,若该表达式的值不等于0,则包含其后各行,直到遇到#endif, #elif,  #else

在#if语句中可以使用表达式define(名字)

当名字定义时其值为1,否则为0



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值