宏输出不起作用

yua*_*uan 0 c++

我正在学习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     }
Run Code Online (Sandbox Code Playgroud)
g++ -o sample ./*
./sample --help
Run Code Online (Sandbox Code Playgroud)

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

./sample --version  
Run Code Online (Sandbox Code Playgroud)

输出:


I'm confused why --version没有输出字符串alpha.

Mat*_*son 6

何时std::cout << x << std::endl ; exit(-1)通过这两行中的宏预处理器进行扩展

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

结果代码是:

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

这可能不是你想要的;

"多do { ... } while(0)语句宏"的常见技巧是在宏中使用您想要的语句.

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

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