C语言预处理命令

以#开头的语句称为预处理语句

#include

#include<头文件名>  //先从默认目录搜索头文件
#include"头文件名"  //先从文件所在目录搜索头文件

 

#define

不带参

  #define 宏名 字符串  //以字符串内容代替宏名(展开),可嵌套

#define PI 3.1415926
//other code
double a=PI;    //展开后该行为:double a=3.1415926;

带参宏

  #define 宏名(形参列表) 字符串  //定义

  宏名(实参列表)  //调用时展开的同时用实参代替形参

#define ADD(x,y) x+y
//other code
ADD(5,6)    //展开后该行为:5+6

操作符#和##

  #操作符可将参数转为字符串

#define A(x) #x
//other code
A(!@#D"F"AS123);    //展开后该行为:"!@#D\"F\"AS123"

  ##可将两个参数拼接起来

#define B(x,y) x##y
//other code
int x=B(23,33)     //展开后该行为:int x=2333

  注意:含有#或##的宏命令不支持嵌套。其内的其他宏不会被展开。

  解决方法:加一层转换宏

#undef

  取消#define

#if ... #elif ... #else ...#endif

  功能参考if...elseif...else,但判断条件必须为常量表达式,不能为变量

  #if 常量表达式

    代码

  #elif 常量表达式

    代码

  #elif 常量表达式

    代码

  ...

  #else

    代码

  #endif

#ifdef ... #else ... #endif

  如果宏被定义过就编译其下的代码

  #ifdef 宏名

    代码

  #else

    代码

  #endif

#ifndef ... #else ... #endif

  如果宏没被定义过就编译其下的代码

  #ifndef 宏名

    代码

  #else

    代码

  #endif

 

用宏有风险,装逼需谨慎

posted @ 2017-02-28 21:12  Dumblidor  阅读(370)  评论(0编辑  收藏  举报