设为首页 加入收藏

TOP

我也要学C语言-第十二章:编译预处理――不带参数的宏
2014-11-23 21:58:28 来源: 作者: 【 】 浏览:4
Tags:语言 十二 编译 处理 参数

C语言的宏是用来间接的操作编译环境的。

  C语言在对源程序进行正常编译之前,先对一些特殊的预处理命令作解释,产生一个新的源程序,之后再进行通常的编译(要得到中间文件加参数/p)。

  在源程序中,为了区分预处理命令和一般的C语句的不同,所有预处理命令行都以符号#开头并且宏一定要大写哦,因为大家都是这样做的,并且结尾不用分号。

  预处理命令可以出现在程序的任何位置,但是习惯上尽可能地写在源程序的开头,其作用范围从其出现的位置到文件尾。

不带参数的宏定义:

  #define 标识符 语句序列或者表达式

  它的作用是在编译预处理时,将源程序中所以标识符替换成语句序列。

  宏常常用来定义符号常量,简化一些标识符的书写,部分的弥补了C语言没有元素个数可变的数组的不足:例子:

#include #define IN scanf#define OUT printf#define N 2void main(){ int i = 0; char name[N][20]; long num[N]; OUT("Please input name and ID: "); for(i; i我们把这段代码在VC6.0中编译不链接,编译不链接在VC6.0IDE的设置是这样的,打开:

在Project Options后面加上/P参数。这样你选择只编译

就可以就得到编译预处理后的.i文件。我们再打开.i文件看看:

我们可以看到,N都被替换为2了,IN都替换为scanf了,OUT被替换为printf啦!所以这样的控制编译器预处理的语句通常叫预处理命令!

不带参数的宏的好玩的地方。看代码:

  

#include "stdio.h"#define dodolook int g_a1 = 0x12345678;static int g_a2 = 0x87654321;dodolook void go(){ // x@ 1 go@@YAXXZ@4HA static int x = 0x88888888; printf("%08x", x);}int main(){ // x@ 1 main@@9@4HA static int x = 0x12312312; int a = 111; int b = 222; dodolook go(); return (0);}

<script type="text/java script"> if (!isSyntaxHighlighted) { try { SyntaxHighlighter.all(); } catch (e) { } } <script src="/script/ShowHidden.js" type="text/java script"> <script type="text/java script"> if (!isSyntaxHighlighted) { try { SyntaxHighlighter.all(); } catch (e) { } } <script src="/script/ShowHidden.js" type="text/java script"> <script type="text/java script"> if (!isSyntaxHighlighted) { try { SyntaxHighlighter.all(); } catch (e) { } } <script src="/script/ShowHidden.js" type="text/java script">
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇贪吃蛇单机版 下一篇指针参数传递内存的方法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: