当我尝试在Linux中使用G ++ 4.8编译程序时,出现“未提供有效的预处理令牌”错误。并且当我使用CCSuntudio在Solaris中编译它时,我没有错误。
在我的代码下面:
#include <iostream> #define func(type1,varname1) \ cout << "ma var est "<<##varname1<<" et le type est "<<#type1; \ cout <<endl; using namespace std; int main() { func("int", "area"); }
它在CCSunStudio中完美运行,但不适用于G ++
hello.hxx:2:23: error: pasting "<<" and ""area"" does not give a valid preprocessing token cout << "ma var est "<<##varname1<<" et le type est "<<#type1; \ ^ hello.cxx:7:1: note: in expansion of macro ‘func’ func("int","area"); ^
感谢您的帮助
当我尝试在Linux中使用G ++ 4.8编译程序时,出现“未提供有效的预处理令牌”错误。并且在Solaris中使用CCSuntudio进行编译时没有错误。在我的下面...
在这种情况下,g ++是正确的。 <<##varname1
的语义是<<
和varname1
的扩展值粘贴到一个令牌中,即,<<"area"
被编译器视为单个令牌,并且由于这不是有效的令牌,因此会报告错误。
[不需要在每次在宏中使用参数时都使用##
。