奇怪的编译器行为 (C++)

Posted

技术标签:

【中文标题】奇怪的编译器行为 (C++)【英文标题】:Weird Compiler behavior (C++) 【发布时间】:2016-12-15 04:01:23 【问题描述】:

我正在尝试将 GA 库 (GALib) 添加到我的无错误程序中,当我添加它时,编译器会返回奇怪的错误并重复它们很多次......例如,“语法错误:缺少' ' before '

template<class _Ty>
_Check_return_ inline _Ty _Pow_int(_Ty _Xx, int _Yx) _NOEXCEPT

unsigned int _Nx;
if (_Yx >= 0)
    _Nx = static_cast<unsigned int>(_Yx);
else
    _Nx = static_cast<unsigned int>(-_Yx);

for (_Ty _Zx = static_cast<_Ty>(1); ; _Xx *= _Xx)
    
    if ((_Nx & 1) != 0)
        _Zx *= _Xx;
    if ((_Nx >>= 1) == 0)
        return (_Yx < 0 ? static_cast<_Ty>(1) / _Zx : _Zx);
    

错误在 cmath.h 同一行的错误重复了 25 次左右。其他许多人也是如此。 (提到的错误是列表中的第一个错误) PS。我使用以下顺序添加了 GA 文件: 1-项目属性>C++>其他包含库>选择文件夹 2-将包含标题和源的文件夹拖放到项目解决方案管理器 聚苯乙烯。所有源文件的扩展名都是 .C 而不是 .cpp 我该如何解决这种情况?

【问题讨论】:

@Vality 这是标准库代码。 @Peet 它们应该是 C++ 还是 C 源文件?可能该库使用 .C(大写 C)表示 C++,但由于 Windows 不区分大小写,因此将 .C 与 .c 视为 C 相同。 @immibis 我在写这个问题的时候一直在思考这个问题,所以我回到了 GA 库的文档,发现:“设置开发环境以在 .C 文件上使用 C++ 编译器(这是 MS Visual C++ 中的 /TP 标志)。在 Visual C++ 中启用 RTTI。“虽然不知道该怎么做...仍在搜索 库使用 .c 作为 c++ 代码的扩展是非常愚蠢的。 @Peet 在源文件的属性中有一个选项。 【参考方案1】:

此页面中的以下步骤:msdn.microsoft.com/en-us/library/032xwy55.aspx 大多数错误都消失了(包括提到的错误)。

主要问题是编译器使用默认选项处理 .C 文件,我在前面的页面中将其更改为 C++。

【讨论】:

以上是关于奇怪的编译器行为 (C++)的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio C++ 编译器在局部变量对象上的奇怪行为

由于未定义的行为或编译器错误导致 C++ 代码崩溃?

奇怪的 React 编译器行为

C++ 编译器可以重新排序结构中的元素吗

奇怪的编译器行为 - 可选参数

gcc 4.6 编译器的奇怪行为