【宏思微想:科技生活,技术开发】
1. 宏(macro)定义
宏的名字中不允许空格,且遵守C变量命名规则:只能由数字,字母,下划线组成, 第一个字符不能为数字。
定义宏: #define
取消已定义宏:#undef
1.1 不带参数的宏
#define A 2
1.2 带参数的宏
#define B(x,y) ((x)+(y))//注意:最好每个参数都用括号单独扩起来。
1.3 常见的ANSI C中预定义的6个宏
__DATA__: 包含当前日期的字符串
__FILE__: 包含文件名称的字符串
__LING__: 表示当前行号的整数
__STDC__: 如果编译器遵循ANSI标准,它就是非零值
__TIME__: 包含当前时间的字符串
__cplusplus :指示用c还是c++来编译,如下范例:
#ifdef __cplusplus
extern "C "{
#endif
…………
…………
#ifdef __cplusplus
}
#endif
1.4 常见其他用法
1) 利用宏参数创建字符串:#运算符
#define p(x) printf(“The “#x” is %d\n”,((x)+(x)))
int y=5;p(y);
结果:The y is 10.
2) “粘合剂”用法:##运算符
#define x(n) x##n
宏调用:x(4)
结果:x4
3) 可变宏:...和__VA_ARGS__
宏定义中参数列表的最后一个参数为省略号。
#define PR(x,...) printf(“message “#x”:”__VA_ARGS__)
double x=48; double y;
y = x+x
PR(1,“x=%g\n”,x);
PR(2,“x=%.2f,y=%.4f\n”,x,y);
结果:message1:x=48
message2:x=48.00,y=96.0000
4) 语言符号(token)
系统把宏的主体当做语言符号类型字符串。
#define B 2*2 token:2*2
#define B 2 * 2 token:2,*,2
2. 文件包含
1)#include 指令
#include “a.h” //包含头文件
#include “a.c”//包含C源文件,一般不建议这样做。
2)防止头文件被重复包含
#ifndef __FILENAME_H__
#define __FILENAME_H__
…
#endif
3. 条件编译
#if : 如果给定条件为真,则编译以下代码
#ifdef :如果宏已经定义,则编译以下代码
#ifndef :如果宏没有定义,则编译以下代码
#elif :如果前面的#if给定的条件不为真,当前条件为真,则编译以下代码
#else :如果前面的#if给定的条件不为真,则编译以下代码
#endif :结果一个条件编译块
#error :停止编译并显示错误信息
#pragma :将编译器指令置于源代码中。常见#pragma pack(n),#pragma warning
#line :重置由__LINE__ 和 __FILE__ 宏报告的行号和文件名
范例:
#line 1000 //把当前行号重置为1000
#line 10 “cool.c”//把行号重置为10,文件名重置为cool.c
——————(完)——————
本文暂时没有评论,来添加一个吧(●'◡'●)