2012-04-16 80 views
0

你好,请找到下面简单的宏代码错误用c宏扩展

#include <iostream> 

#define INCL #include 

INCL <stdlib.h> 

int main() 
{ 
    std::cout << "Hello, world\n" << std::endl ; 

    return 0; 
} 

当我编译的代码,则抛出 错误:流浪A#a在程序

请帮助。

感谢

回答

0

C++编译包括以下阶段:

  1. 预处理(宏扩展)
  2. 编译
  3. 链接

的一点是,您尝试使用预处理器(阶段1)预处理自己,这是行不通的。宏只能用于生成编译器的代码。您不能将预处理器指令包装到预处理器宏中。

1

预处理器宏不能创建其他预处理器宏。在这方面你只是运气不好。

但是,您可以使用宏作为包括参数:

#define FOO(x) "/usr/lib/" #x 
#include FOO(mylib.h) 
+0

嘿感谢,我要在这里提到相同的代码是在Intel编译罚款。然而,我们将代码从intel编译器移到GCC编译器,我们遇到上面提到的错误。 我找不到任何文件提到#不能用于宏的开始。不过,我发现提及'##'的文件不能在开始或结束时使用 – NoName 2012-04-16 11:02:03