我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:2019跑狗图高清彩图 > 指令处理 >

C语言预处理指令有哪些?

归档日期:07-13       文本归类:指令处理      文章编辑:爱尚语录

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部我们可以在C源程序中插入传给编译程序的各中指令,这些指令被称为预处理器指令,它们扩充了程序设计的环境。现把常用的预处理命令总结如下:

  显然,上述所有的12个预处理指令都以符号#开始,,每条预处理指令必须独占一行。

  #define指令定义一个标识符和一个串(也就是字符集),在源程序中发现该标识符时,都用该串替换之。这种标识符称为宏名字,相应的替换称为宏代换。一般形式如下:

  这种语句不用分号结尾。宏名字和串之间可以有多个空白符,但串开始后只能以新行终止。

  例如:我们使用LEFT代表1,用RIGHT代表0,我们使用两个#define指令:

  宏代换就是用相关的串替代标识符。因此,如果希望定义一条标准错误信息时,可以如下定义:

  #error指令强制编译程序停止编译,它主要用于程序调试。#error指令的一般形式是:

  注意,宏串error-message不用双引号包围。遇到#error指令时,错误信息被显示,可能同时还显示编译程序作者预先定义的其他内容。

  程序中的#include指令要求编译程序读入另一个源文件。被读入文件的名字必须用双引号(“”)或一对尖括号()包围,例如:

  包含文件中可以包含其他#include指令,称为嵌套包含。允许的最大嵌套深度随编译器而变。

  文件名被双括号或尖括号包围决定了对指定文件的搜索方式。文件名被尖括号包围时,搜索按编译程序作者的定义进行,一般用于搜索某些专门放置包含文件的特殊目录。当文件名被双括号包围时,搜索按编译程序实时的规定进行,一般搜索当前目录。如未发现,再按尖括号包围时的办法重新搜索一次。

  通常,绝大多数程序员使用尖括号包围标准的头文件,双引号用于包围与当前程序相关的文件名。

  若干编译指令允许程序员有选择的编译程序源代码的不同部分,这种过程称为条件编译。

  条件编译指令中最常用的或许是#if,#else,#elif和#endif。这些指令允许程序员根据常数表达式的结果有条件的包围部分代码。

  如#if后的常数表达式为真,则#if和#endif中间的代码被编译,否则忽略该代码段。#endif标记#if块的结束。

  #else指令的作用与C语言的else相似,#if指令失败时它可以作为备选指令。例如:

  注意,#else既是标记#if块的结束,也标记#else块的开始。因为每个#if只能写一个#endif匹配。

  #elif指令的意思是“否则,如果”,为多重编译选择建立一条if-else-if(如果-否则-如果链)。如果#if表达式为真,该代码块被编译,不测试其他#elif表达式。否则,序列中的下一块被测试,如果成功则编译之。一般形式如下:

  条件编译的另一个方法是使用编译指令#ifdef和#ifndef,分别表示“如果已定义”和“如果未定义”。#ifdef的一般形式如下:

  如果macro-name原先已经被一个#define语句定义,则编译其中的代码块。

  如果macro-name当前未被#define语句定义,则编译其中的代码块。

  #undef指令删除前面定义的宏名字。也就是说,它“不定义”宏。一般形式为:

  除#ifdef之外,还有另外一种确定是否定义宏名字的方法,即可以将#if指令与defined编译时操作符一起使用。defined操作符的一般形式如下:

  也可以在defined之前加上感叹号”!”来反转相应的条件。例如,只有在DEBUG未定义的情况下才编译。

  使用defined的一个原因是,它允许由#elif语句确定的宏名字存在。

  #line指令改变__LINE__和__FILE__的内容。__LINE__和__FILE__都是编译程序中预定义的标识符。标识符__LINE__的内容是当前被编译代码行的行号,__FILE__的内容是当前被编译源文件的文件名。#line的一般形式是:

  其中,number是正整数并变成__LINE__的新值;可选的“filename”是合法文件标识符并变成__FILE__的新值。#line主要用于调试和特殊应用。

  #pragma是编译程序实现时定义的指令,它允许由此向编译程序传入各种指令。例如,一个编译程序可能具有支持跟踪程序执行的选项,此时可以用#pragma语句选择该功能。编译程序忽略其不支持的#pragma选项。#pragma提高C源程序对编译程序的可移植性。

  操作符#通常称为字符串化的操作符,它把其后的串变成用双引号包围的串。例如:

  操作符#和##主要作用是允许预处理程序对付某些特殊情况,多数程序中并不需要。

本文链接:http://ok-panic.net/zhilingchuli/327.html