当前位置:编程学习 > C/C++ >>

求C语言中预编译命令表?

答案:1 宏定义即是字符串替换。宏分为无参宏和含参宏。

定义宏的位置可以在函数外部也可以在函数内部(vc++ 2008 测试通过)。

宏的作用域是从定义处到取消定义命令[#undef 宏名]之间的部分,若无显式的#undef命令则默认到文件结束。可以使用defined命令可以判断宏是否被定义#if defined X (=#ifdef X),#if !defined X (= ifndef X)。

 

定义含参宏格式如#define SQ(y) ((y)*(y)),其中参数为y,宏得到的是y平方。为了保证宏替换的正确性,多加了3个括号。但这样的保证也是有限的,它要求y的值不能在(y)内改变,如把y换成i++将得不到期望的结果。

 

宏调用(实际上是宏替换)不用考虑形参的类型,这带来一定的好处。如求两个数最大值的宏#define MAX(a,b) (a>b)?a:b,实参可以是int,double等。

宏定义可以包括多个语句,如#define CHANGE(X1,X2,X3,X4) X1 += 1;X2 += 2; X3 += 3; X4 +=4;

 

2 文件包含命令#include的功能是把指定的文件插入该命令行位置取代该命令行,从而把指定的文件和当前的源程序文件连成一个源文件。

 

源代码分布于多个文件时,建议使用调用文件+头文件+实现文件的模式。头文件中包含要用到的函数说明,类型定义,宏定义,常数值等。具体的实现放在实现文件中。在调用文件和实现文件中都包含该头文件即可。

为了避免重复包含头文件,可在头文件中使用#ifndef [头文件标示符(如X_Header等等)] + 头文件内容 + #endif模式。

 

3 条件编译命令可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。 这对于程序的移植和调试很有用。

条件编译有三种形式,下面分别介绍: 


第一种形式根据有无对应宏定义选择编译程序段: 
#ifdef 标识符 // 或 #ifndef 标示符
程序段1 
#else 
程序段2 
#endif

  

第二种形式根据常量表达式值选择编译,值为非0执行if段。

#if 常量表达式 
程序段1 
#else 
程序段2 
#endif 
这里一定要是常量表达式,一般为宏。若是表达式包含变量则编译器只能随便猜一个了。

 

第三种形式含有#elif,看个例子吧

#define ABC 3
void main(){

#if  ABC>0
int a=1;
printf("%d/n",a);
#elif ABC<0
int b=-1;
printf("%d/n",b);
#else
int c=0;
printf("%d/n",c);
#endif
}

 

 

其余的预编译命令如下,这里就不研究它们了。

#line 标志该语句所在的行号
# 将宏参数替代为以参数值为内容的字符窜常量
## 将两个相邻的标记(token)连接为一个单独的标记
#pragma 说明编译器信息

#warning 显示编译警告信息
#error 显示编译错误信息

上一个:C语言完全不懂如何开始学习?
下一个:C语言函数的调用和定义

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,