C语言:宏定义

宏的作用:

定义常量

定义傻瓜表达式:

  只作为符号替换:

#define S(a, b) a * b

// S(1+2, 2+3) // 1+ 2*2 + 3 = 8

 

定义代码段:

#define P(a) {\
    printf("%d\n", a); \
}

'\' 为连接符,因为C规定,宏定义只能写在一行,为了可读性使用多行,并用'\'连接。

 

预定义宏:

 

预处理命令:

条件式编译:代码剪裁,增加可移植性

#ifdef DEBUG

#ifndef DEBUG

#if MAX_N == 5 //宏MAX_N是否等于5
#elif MAX_N == 4 //宏MAX_N是否等于4
#else

#endif

 

 

作用阶段:

 

对象文件在linux下是.o文件,在windows下是.obj文件。每个c源码文件对应一个对象文件。

将对象文件链接后生成可执行文件,在linux下是.out文件,在windows下是.exe文件。

 

实用例子:

实现MAX(a, b)

测试用例:

MAX(2, 3)
5 + MAX(2, 3)
MAX(2, MAX(3, 4))
MAX(2, 3 > 4 ? 3 : 4)
MAX(a++, 6)

linux可以通过gcc -E来查看预编译后的代码。

以下代码可以实现

#include<stdio.h>

#define MAX(a, b) ({\
    __typeof(a) _a = (a);\
    __typeof(b) _b = (b);\
    (_a) > (_b) ? (_a) : (_b);\
})
    
#define P(func){\
    printf("%s = %d\n", #func, func);\
}

int main(){
    P(MAX(2, 3));
    P(5 + MAX(2, 3));
    P(MAX(2, MAX(3, 4)));
    int a = 7;
    P(MAX(a++, 6));
    printf("a=%d\n", a);
    return 0;
}

 

Note: __typeof 在linux下可用

posted @ 2021-04-13 15:38  Dylan_Liang  阅读(356)  评论(0编辑  收藏  举报