Linux C 预处理详解

本文详细介绍了Linux C编程中的预处理概念,包括#if、#elif、#ifdef、#ifndef、#undef、#defined、#line、#pragma、预处理操作符#和##以及预定义宏的使用,为理解和使用C预处理提供了全面的指导。
摘要由CSDN通过智能技术生成
1.预处理程序
按照ANSI标准的定义,预处理程序应该处理以下指令:
#if #ifdef #ifndef #else #elif
#endif
#define
#undef
#line
#error
#pragma
#include
显然,上述所有的12个预处理指令都以符号#开始,每条预处理指令必须独占一行。

2.#define
#define指令定义一个标识符和一个串(也就是字符集),在源程序中发现该标识符时,都用该串替换之。这种标识符称为宏名字,相应的替换称为宏代换。一般形式如下:
#define macro-name char-sequence
这种语句不用分号结尾。宏名字和串之间可以有多个空白符,但串开始后只能以新行终止。
例如:我们使用LEFT代表1,用RIGHT代表0,我们使用两个#define指令:
#define LEFT 1
#define RIGHT 0
每当在源程序中遇到LEFT或RIGHT时,编译程序都用1或0替换。
定义一个宏名字之后,可以在其他宏定义中使用,例如:
#define ONE 1
#define TWO ONE+ONE
#define THREE ONE+TWO
宏代换就是用相关的串替代标识符。因此,如果希望定义一条标准错误信息时,可以如下定义:
#define ERROR_MS “Standard error on input \n”
如果一个串长于一行,可在行尾用反斜线”\”续行,如下:
#define LONG_STRING “This is a very very long \
String that is used as an example”
我们可以用宏写函数:
#define SWAP(a,b)    \
{                    \
int temp = a;        \
a = b;               \
b = temp;            \
}                    \ 
这里的"\"意为这是条整语句,编译完成后,函数如果调用了SWAP(a,b),就变成了{int temp = a; a = b;b = temp;};
宏定义函数与外部调用函数对比:
1)宏定义优点:效率高,因为函数调用涉及压栈,出栈,而宏定义函数不需要;
2)宏定义缺点:占空间,因为没有压栈和出栈,就会一直占着内存;
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值