玖叶教程网

前端编程开发入门

代码:C语言中的预处理(宏定义,文件包含,条件编译)

【宏思微想:科技生活,技术开发】

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

——————(完)——————

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言