预编译指令集

 

 

 

1: 

#if(条件满足)   
  执行代码1   
 #else   
  执行代码2   
 #endif   

例1:

#if !(defined XXX)   //XXX为一个在你的程序中唯一的标识符, 
      //每个头文件的标识符都不应相同。 起标识符的常见方法是若头文件名为"abc.h" ,则标识为"abc_h" 
#define XXX 
   真正的内容,如函数声明之类 
#endif

 

例2:

 

#define MY_PRINTF_SIMPLE

#if defined(MY_PRINTF_SIMPLE)
   void printf(*str) // 向终端简单地输出一个字符串
{
     ...
}
#elif defined(MY_PRINTF_STANDARD)
      int printf(char* fmt, char* args, ...)
{
    ...
}

 

#endif 

 

 

2:

#define指令 
第一种是定义标识,标识有效范围为整个程序,形如#define XXX,常与#if配合使用;
第二种是定义常数,如#define max 100,则max代表100(这种情况下使用const定义常数更好,原因见注1);
第三种是定义"函数",如#define  max(a, b)   ((a)>(b)?(a):(b))  则以后使用 max(x,y) 就可以得到x和y中较大的数

      但 max(a++, b)时,a++会被执行多少次取决于a和b的大小。

 

3:

#include 指令 

用<>括起文件则在系统的INCLUDE目录中寻找文件,若用" "括起文件则在当前目录中寻找文件。一般来说,该文件是头文件。 
注意:<>不会在当前目录下搜索头文件,如果我们不用<>而用""把头文件名扩起,其意义为在先在当前目录下搜索头文件,再在系统默认目录下搜索。 

#include_next 指令

头文件的搜索路径一次为A,B,C,D,E. #include_next所在的当前头文件位于B目录, 那么#include_next使得预处理器从C,D,E目录来搜索#include_next所指定的头文件.

 

4:

#warning, #error

 

#warning, #error分别用于在编译时显示警告和错误信息, 格式如下:

#warning tokens

#error      tokens

例:#warning "some warning"

注意, #error和#warning后的tokens要用""引用起来!

 

 

5:

#pragma用编译器用来添加新的预处理功能或者显示一些编译信息. #pragma的格式是各编译器特定的

 

6:#line

 

  命令#line改变_LINE_与_FILE_的内容,它们是在编译程序中预先定义的标识符。
   __LINE__、 __FILE__ 意思分别为 输出当前代码所在行、所在文件   
  命令的基本形式如下:   
  #   line   number["filename"]   
  其中的数字为任何正整数,可选的文件名为任意有效文件标识符。行号为源程序中当前   
  行号,文件名为源文件的名字。命令# line主要用于调试及其它特殊应用。   
  例如,下面说明行计数从100开始;printf()   语句显示数102,因为它是语句#line  100后的第3行。   
  #line   100   /*   初始化行计数器*   /   
  main   (   )   /*   行号100   */   
  {   /*   行号101   */   
  printf("%d/n"_LINE_)   ;   /*   行号102   */   
  }

 

 

例: 

printf("line: %d, file: %s/n", __LINE__, __FILE__);

 #line 100 "haha"

  printf("line: %d, file: %s/n", __LINE__, __FILE__);

  printf("line: %d, file: %s/n", __LINE__, __FILE__);

  显示:

  line: 34, file: 1.c

  line: 100, file: haha

  line: 101, file: haha

 

7:

 

 #ifdef, #ifndef, defined().

#ifdef, #ifndef, defined用来测试某个宏是否被定义

#ifdef name  或 #ifndef name

它们经常用于避免头文件的重复引用:

#ifndef __FILE_H__

#define __FILE_H__

#include "file.h"

#endif

defined(name): 若宏被定义,则返回1, 否则返回0.

它与#if, #elif, #else结合使用来判断宏是否被定义, 乍一看好像它显得多余, 因为已经有了#ifdef和#ifndef. defined用于在一条判断语句中声明多个判别条件:

#if defined(VAX) && defined(UNIX) && !defined(DEBUG)

和#if, #elif, #else不同, #indef, #ifndef, defined测试的宏可以是对象宏, 也可以是函数宏。

 

8:

#       出现在宏定义中的#运算符把跟在其后的参数转换成一个字符串。有时把这种用法的#称为字符串化运算符。 

##    运算符用于把参数连接到一起。预处理程序把出现在##两侧的参数合并成一个符号。

 

例:

#define   PASTE(n)   "adhfkj"#n
void main()
{
printf("%s/n",PASTE(15));
}

输出为:adhfkj15

 

#define  NUM(a,b,c)  a##b##c
#define  STR(a,b,c)   a##b##c
void main()
{
printf("%d/n",NUM(1,2,3));
printf("%s/n",STR("aa","bb","cc"));
}
输出为:
123
aabbcc

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值