禁用特定代码块的语言扩展?

时间:2011-12-08 15:31:48

标签: c++ visual-studio-2008

我想在MSVC编译器中禁用语言扩展,但仅限于特定的代码块。

有一个compiler option可以配置为禁用整个翻译单元的语言扩展(例如,整个文件),但我不想这样做。在编译#include语句和其他预处理程序时,我最终希望启用语言扩展,但禁用它用于我的实际代码。

有没有办法禁用特定代码块的语言扩展,或者在MSVC 2008中使用#pragma

1 个答案:

答案 0 :(得分:1)

这是不可能的,因为当启用语言扩展时,Visual Studio使用不同的算法来编译代码,这在预处理器扩展之后发生。换句话说,不可能用扩展名编译一半文件,而另一个没有。

让我用一个使用Variable-Length Argument Lists扩展名的示例来说明。如果在一个头文件中将函数定义为以下内容,该怎么办:

void myfunc( int x, ... );
void myfunc( int x, char * c )
{ }

稍后在源文件中调用

char * c = new char;
myfunc(5, c);

根据ANSI C,头文件中的声明完全没有意义,因此应该调用带有“...”的myfunc,而根据MSVS应该使用第二个函数。