预处理命令

1.预处理命令:
C程序的源代码中可以包括各种编译指令,这些指令称为预处理指令。虽然它们不是C语言的一部分,却扩展了C程序设计的环境。
预处理命令都是以"#"开头的,ANSI标准定义的C语言预处理程序有:#define,#error,#include,#if,#else,#elif,#endif,#ifdef,#ifndef,#undef,#line,#pragma.
在源程序中这些命令都放在函数之外,而且一般都放在源文件的前面,称之为预处理部分。所谓预处理就是在进行编译的第一遍扫描(词法扫描和语法分析)之前所做的工作。预处理是C语言中的一个很重要的功能,它由预处理程序负责完成。当对一个源文件进行编译时,系统将自动引用预处理程序对源文件中的预处理部分作处理,处理完毕后自动进入对源程序的编译。
#define:命令#define定义了一个标识符及一个字符串,在源程序中每次遇到该标识符时,均以定义的字符串替换它,ANSI标准将标识符定义为宏名,将替换过程称为宏替换或宏展开。
说明:
1.宏定义是用宏名来表示一个字符串,在宏展开是又以该字符串取代宏名,这只是一种简单的代替,字符串中可以包含任何字符,可以使常数,也可以是表达式,预处理程序对它不做任何检查。
2.宏定义不是说明或语句,在行末不用加分号,如果加上分号则连分号也一起替换。
3.宏替换仅仅是以字符串代替标识符,替换的前提是宏标识符必须独立地识别出来,否则不进行替换。比如若是宏名在源程序中用引号括起来,预处理程序就不对齐作宏替换。
4.如果字符串长于1行,可以在行末尾用反斜杠'\'续行。
5.C语言程序普遍使用大写字母定义标识符。定义宏的时候最好用"()"引起来,避免产生一些不必要的错误。
6.用宏替换实在的函数的一大好处是宏替换增加了代码的速度,因为不存在函数调用的开销,但是增加也有代价:由于重复编码而增加了程序的长度。
7.定义带参宏的时候宏名和参数之间不能有空格,否则参数就连接到字符串那边。带参的宏只是进行简单的参数替换,而函数中的传参是得进行内存的分配的。
#error:
命令#error强迫编译器程序停止编译,主要用于程序调试。#error强迫编译器发出一条错误消息,该消息包含指令中的文本,这条指令的目的就是在程序崩溃之前能够发出一条信息。
#include:命令#include使编译程序将另一源文件嵌入带有#include的源文件中。功能是把指定的文件插入该命令行位置取代该命令行,从而把指定的文件和当前的源程序文件连成一个源文件。这样在程序编程的时候一个大的程序可以分为多个模块,由多个程序员分别编程。
条件编译:可以按照不同的条件去编译不同的程序部分,因为产生不同的目标代码文件,这对于程序的移植和调试是很有用的。
#if,#else,#elif,#endif
第一种形式:根据是否定义过某个标识符进行编译哪段程序。
#ifdef 标识符
编译程序1
#else
编译程序2
#endif
*****************
#ifndef 标识符
编译程序1
#else
编译程序2
#endif
第二种形式:根据NUM是否被定义过来决定编译那一段语句。
#define NUM OK
#ifdef NUM 
...
#else
...
#endif
第三种形式:功能就是若常量表达式的值为真,对程序段1进行编译,否则对程序段2进行编译。
#if 常量表达式
编译程序段1
#else
编译程序段2
#endif


#undef:用来取消其后那个前面已经定义过有宏名的定义:#undef 标识名


#line:用来改变__LINE__与__FILE__的内容,它们是在编译程序中预先定义的标识符。
#line number ["filename"]
如:#line 100 "jia"那么__LINE__ =100; __FILE__=jia;


#pragma:向编译程序传送各种指令。#pragma的作用是设定编译器的状态或者指示编译器完成一些特定的动作。
#pragma message("消息文本");当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。
#pragma code_seg(["section-name"[,"section-class"]])能够设置程序中函数代码存放的代码段,当我们开发驱动程序的适合就会用到。
#pragma once;只要在头文件的最开始加入这条指令就能够保证头文件被编译一次。
#pragma hdrstop;表示预编译头文件到此结束,后面的头文件不进行预编译了。
#pragma comment(...)该指令将一个注释记录放入一个对象文件或可执行文件中。
#pragma pack(n)指定结构体的对齐方式。设定变量以n字节对齐方式。
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值