加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 06:58:13 所属栏目:百科 来源:网络整理
导读:我想在MSVC编译器中禁用语言扩展,但仅限于特定的代码块. 有一个compiler option可以配置为禁用整个翻译单元的语言扩展(例如,整个文件),但我不想这样做.我最终希望在编译#include语句和其他预处理程序时启用语言扩展,但是为我的实际代码禁用它. 有没有办法禁
我想在MSVC编译器中禁用语言扩展,但仅限于特定的代码块.

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

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

解决方法

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

让我用一个使用可变长度参数列表扩展的示例来说明.如果在一个头文件中将函数定义为以下内容,该怎么办:

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

稍后在您的源文件中调用

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读