gpt4 book ai didi

c++ - 这个宏如何工作?

转载 作者:行者123 更新时间:2023-11-30 18:22:35 25 4
gpt4 key购买 nike

我编写了以下 C 代码:

#define MAX_T(a,b,d) \
{ int len = (d);printf("len %d", len);}

int main()
{
//MAX_T(10,30, smgarbage)
MAX_T(10,30, len)
}

当我注释掉 MAX_T(10,30, smgarbage) 并运行它时,它输出 len 24。当我注释掉 MAX_T(10,30, len) 并运行 MAX_T(10,30, smgarbage) 时,我收到以下编译器错误:

test.c: In function 'main':  
test.c:34: error: 'smgarbage' undeclared (first use in this function)
test.c:34: error: (Each undeclared identifier is reported only once
test.c:34: error: for each function it appears in.)

执行MAX_T(10,30, len)时,为什么编译器没有出现错误?语句 int len = (d); 是否导致此问题?怎么办?

最佳答案

宏替换后,MAX_T(10,30, smgarbage) 将是:

{ int len = (smgarbage);printf("len %d", len);}

显然没有 smgarbage 的声明。

MAX_T(10,30, len) 将是:

{ int len = (len);printf("len %d", len);}

尽管输出未知,但由于 len 包含垃圾值,这将编译。

与以下内容相同:

{
int len;
len = len;
printf("len %d", len);
}

关于c++ - 这个宏如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18865539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com