C/C++第四课~预处理器、宏

预处理器、宏、内联函数

1、预处理器

预处理器不是编译器,但是它是编译过程中一个单独的步骤。
预处理器是一个文本替换工具
所有的预处理器命令都是以井号(#)开头

常用预处理器

预处理器 说明
#include 导入头文件
#if if 开启关闭某些代码块
#elif else if
#else else
#endif 结束 if
#define 宏定义
#ifdef 如果定义了宏
#ifndef 如果未定义宏
#undef 取消宏定义
#pragma 只会导入一次文件

2、宏 ~ 执行文本替换的

宏变量,就是执行文本替换的。有点类似于 java 中的 ConstantUtils 中的final static String url
宏函数, 定义了一个函数的别名。我测试的时候,宏函数中不能 有 回车。 如果有需要加 \ 符号

宏 函数的优缺点

执行文本替换,是把code放到对应的位置,不会造成函数调用的开销(开辟栈空间,记录返回地址,将形参压栈,从函数返回还要释放堆栈。)
(缺点:)生成的目标文件大,不会执行代码检查。 因为是 复制的 关系,所以实际编译的时候,大量的宏函数会导致代码的实际量会变大

#define nuM 110;
#define TEST(a) {\
    int rucan = a + 10;\
    printf("current value %d\n", rucan);\
}
#define CHENG(x, y) x * y;
int main() {
    int a = nuM;
    printf("%d\n", a);
    TEST(a);
    // 文本替换  2 + 2 * 3 + 2
    int ji = CHENG(2+2, 3 + 2);
    printf("%d\n", ji); // 所以 ji 是 10 不是20
    return 0;
}

3、内联函数

与 宏 函数 相似。 工作模式也是 代码替换
内部的逻辑不能太复杂,复杂就会失效(使用 while 、swich、 for 等 复杂的语句) 。并且内联函数本身不能直接调用自身

定义内联函数 ~ 还不太会用

inline int yangxinyu(int a) {
    printf("current = %d\n", a);
}

你可能感兴趣的:(C/C++第四课~预处理器、宏)