【问题标题】:Alternative tokens (not, and, etc...) in VisualStudio 2013Visual Studio 2013 中的替代标记(非和等)
【发布时间】:2026-01-21 08:30:02
【问题描述】:

“not”、“and”等是 C++ 中的关键字(C 中的宏)。有没有办法在 Visual Studio 2013 中“启用”它们?我可以将这些词用作包含iso646.h 的宏。但是 VS 似乎无法将它们识别为关键字。

【问题讨论】:

  • 我可以将这些词用作包含 iso646.h 的宏。但是 VS 似乎无法将它们识别为关键字。 你是说它有效但没有语法高亮显示?
  • @ta.speot.is:他说在 C++ 中它应该将它们识别为关键字没有标题,但现在他必须使用标题来获得它认识他们。
  • 请记住,“VS”是 Visual Studio,它不是编译器。 但是 VS 似乎无法将它们识别为关键字。 如果您说的是正确的,那么根据手册 msdn.microsoft.com/en-us/library/1k6w8551.aspx 完全可以预期 not 运算符是文本等价于 !。有两种方法可以在程序中访问 not 运算符:包含头文件 iso646.h,或使用 /Za(禁用语言扩展)编译器选项进行编译。
  • 试试 /Za 选项

标签: c++ visual-studio-2013


【解决方案1】:

使用/Za 似乎可以在不包括iso646.hsee it live 的情况下启用它们,以下程序在不使用/Za 的情况下会产生错误,但其他情况下可以正常工作:

int main()
{
    int x = 1, y = 0 ;
    if (x and y)    
    {
    //...  
    }

    return 0;
}

由于 ta.speot.is 表示 /Za 禁用扩展,因此以下 documentation 表示您必须包含 ios646.h 否则:

在 /Ze 下,如果要使用以下运算符的文本形式,则必须包含 iso646.h:

它列出了下面的替代标记。

注意,我知道我以前看过这个,我在my answer 中包含了指向类似问题的bug report for this 的链接。虽然这不包括上述解决方法。

注2:干杯和hth。 - Alf 表示关闭扩展可能会产生许多不良后果,因此您最好只包括iso646.h

【讨论】:

  • 关闭visual c++扩展不是一个好主意,因为那样很可能很多微软代码无法编译。而是使用 iso646.h 的强制包含
  • @Cheersandhth.-Alf 谢谢你的评论,调整了答案。我很好奇你有什么例子吗?
  • 喜欢,包括<windows.h> 失败。
【解决方案2】:

使用iso646.h 标头的forced include (option /FI)

对于命令解释器的工作,你可以把它放在你的 CL 环境变量中,或者例如在响应文件中。


使用 /Za 关闭 Visual C++ 语言扩展也可以解决问题,但代价是编译器几乎无用 - 因为 Microsoft 代码如Windows API 标头通常使用扩展。

【讨论】:

    【解决方案3】:

    在更新版本的 VS 上(在 15.7.0 预览版 3.0 上测试);确保为 Visual Studio 设置了一致性模式:

    然后用alternative operator representations编译。

    【讨论】: