C语言宏定义-基本使用
1. 宏定义的基本语法
宏定义分为2类, 不带参数的宏定义 和 带参数的宏定义
1.1 不带参数的宏定义
形式:使用一个指定的标识符来代表一个字符串
#define 标识符 字符串
例如
#define PI 3.14159265
作用:程序中但凡使用到PI
的地方全部都会用3.14159265
来替换,主要用途使用一个简单标识符来代替一个长的字符串
1.2 带参数的宏定义
形式:带参数的宏定义不是仅仅进行简单的字符串替换,还要进行参数替换
#define 标识符(参数表) 字符串
例如
/**
* @def CMO_MAX
* @brief Return larger value of two provided expressions.
*/
#define CMO_MAX(a, b) ((a) < (b) ? (b) : (a))
作用:对带参数的宏定义是这样进行展开置换的在程序中如果有带实参的宏,如上,则按#define指令行中指定的字符串从左到右进行置换。
2. 宏展开过程
gcc -E 只激活预处理,这个不生成文件, 你需要把它重定向到一个输出文件里面。
例如用法
#include <stdio.h>
/* 不带参数宏 */
#define PI 3.14159265
/* 带参数宏 */
#define CMO_MAX(a, b) ((a) < (b) ? (b) : (a))
int main (void)
{
/* 不带参数宏展开 */
double pi = PI;
/* 带参数宏展开 */
int max_var = CMO_MAX(1, 3);
printf("hello, pi:%lf, max_var:%d", pi, max_var);
return (0);
}
// gcc -E hello.c > hello_e.txt
// gcc -E hello.c | more
使用命令 gcc -E hello.c > hello_e.txt
, 查看gcc预处理的结果