C 语言 宏 整理

开头的语句就是预处理命令

#define              定义一个预处理宏
#undef               取消宏的定义

#include             包含文件命令
#include_next        与#include相似, 但它有着特殊的用途

#if                   编译预处理中的条件命令, 相当于C语法中的if语句
#ifdef                判断某个宏是否被定义, 若已定义, 执行随后的语句
#ifndef               与#ifdef相反, 判断某个宏是否未被定义
#elif                 若#if, #ifdef, #ifndef或前面的#elif条件不满足, 则执行#elif之后的语句, 相当于C语法中的else-if
#else                 与#if, #ifdef, #ifndef对应, 若这些条件不满足, 则执行#else之后的语句, 相当于C语法中的else
#endif                #if, #ifdef, #ifndef这些条件命令的结束标志.
defined               与#if, #elif配合使用, 判断某个宏是否被定义

#line                 标志该语句所在的行号
#                     将宏参数替代为以参数值为内容的字符窜常量
##                    将两个相邻的标记(token)连接为一个单独的标记
#pragma               说明编译器信息

#warning              显示编译警告信息
#error                显示编译错误信息
#和##用于对字符串的预处理操作, 所以他们也经常用于printf, puts之类的字符串显示函数中.
#用于在宏扩展之后将tokens转换为以tokens为内容的字符串常量.
e.g.
#define TEST(a,b) printf( #a "<" #b "=%d\n", (a)<(b));
注意: #只针对紧随其后的token有效!
##用于将它前后的两个token组合在一起转换成以这两个token为内容的字符串常量. 注意##前后必须要有token.

语句中可以利用" \ "来换行.

把宏参数变为一个字符串,

用##把两个宏参数贴合在一起.

define A(x) T_##x

A(1)------〉T_1

define C(x) #x

C(1)------〉 "1 "

你可能感兴趣的:(C 语言 宏 整理)