gpt4 book ai didi

c++ - 宏输出不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 15:47:36 24 4
gpt4 key购买 nike

我正在学习 C++,宏行为不符合预期。

  1     #include<cstdlib>
2 #include<iostream>
3 #include<cstring>
4 #define die(x) std::cout << x << std::endl ; exit(-1)
5 const char *help = "Usage: coffee --help --version";
6 const char *version = "alpha";
7 int main(int argc,char **argv)
8 {
9 if(argc<2||!strcmp(argv[1],"--help"))
10 die(help);
11 if(!strcmp(argv[1],"--version"))
12 die(version);
13
14 return 0;
15
16 }

g++ -o sample ./*
./sample --help

输出:用法:coffee --help --version

./sample --version  

输出:


我很困惑为什么 --version 没有输出字符串 alpha

最佳答案

std::cout << x << std::endl ; exit(-1)在这两行中被宏预处理器展开

 9               if(argc<2||!strcmp(argv[1],"--help"))
10 die(help);

结果代码是:

 if(argc<2||!strcmp(argv[1],"--help"))
std::cout << help << std::endl;
exit(-1);

这可能不是您想要的;

“多语句宏”的常用技巧是使用 do { ... } while(0)围绕您想要在宏中包含的语句。

您可以使用 gcc -Ecl -E从 C 预处理器获取输出,这样您就可以看到编译器实际看到的内容。

编辑:我应该指出,在这种情况下,我个人更喜欢“die(msg) 函数”而不是修复宏。然后你可以,例如,在 die() 中设置一个 breakpoing 并找出当某些事情不正确时你是如何到达那里的!您不能在宏中设置断点。

关于c++ - 宏输出不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14102342/

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