问题标签 [compiler-flags]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gcc - 什么是 GCC 的 fno-strict-aliasing 标志的等价物 ICC,英特尔编译器?
英特尔编译器似乎逐字接受 -fno-strict-aliasing 标志,但我没有看到任何地方记录的行为,并且该标志可能会被忽略。诸如 -no-ansi-alias 之类的标志看起来相关,但我想确保我指定了正确的行为。
gcc - 如何查看哪些标志 -march=native 将激活?
我正在使用 GCC 4.3 编译我的 C++ 应用程序。而不是手动选择我正在使用的优化标志-march=native
,理论上应该添加适用于我正在编译的硬件的所有优化标志。但是我怎样才能检查它实际使用了哪些标志呢?
ios - iOS 编译器使用什么定义
我有以下要在 Iphone OS 上运行的代码,我应该为 IOS 使用什么编译器标志,以及应该在下面的代码中的什么位置插入它?谢谢
c++ - 如何让 GCC 用非平凡的 const/dest 实例化一个类实例?
我正在实施一个分析器。我想使用 Constructor/Destructor 习惯用法来跟踪我何时进入/退出函数。
我的代码的大致轮廓如下:
但是,当我运行它时,不会调用构造函数和析构函数。即使我反汇编,也没有对 Profile::Profile() 的引用。我知道标准规定编译器不能优化具有非平凡构造函数的实例。
编译器或链接器的命令行上没有优化标志。
我也尝试指定属性((使用)),但无济于事。
下面是拆解:
确实有代码生成并链接到可执行文件中
gcc - 混合内存对齐和未对齐的代码
我最近编译了 GotoBLAS2 (MacOSX 10.6) 并将其链接到我的代码,导致各种错误的结果。我通过 valgrind 运行所有内容,注意到来自 GotoBLAS 的一些非法读取。当更仔细地查看它时,我发现 GotoBLAS 是使用 -m128bit-long-double 对齐选项编译的。一旦我也用这个标志编译了我的代码(尽管我根本不使用任何长双打),一切正常,给出正确的结果,没有任何 valgrind 模糊。
现在我的问题是:
- 我是否必须使用相同的对齐标志编译所有其他库依赖项?
xcode - Xcode:构建设置 - 其他链接器标志:什么是 -licucore?
-licucore 已经在我添加到项目中的目标的其他链接器标志中。一般不是空白吗?
c++ - 为什么没有返回语句时没有编译器错误?
与 Java 不同,在 C/C++ 中允许以下内容:
这通常会导致崩溃和难以调试的问题。为什么标准不强制对非函数进行最终返回?(编译器会为错误的值void
生成错误)return
gcc/msvc 中是否有任何标志来强制执行此操作?(类似-Wunused-result
)
c - C编译器中是否有调试模式编译标志的标准?
标准规范(ANSI/C89/C99)是否有任何预定义标志用于 C 编译器中的调试模式编译?
我知道DEBUG
并NDEBUG
标记,但我不确定它们是否符合 C 标准。
optimization - 为什么在编译期间不使用 GCC 选项 -Os?
Clang警告我,
在编译期间使用make
. 为什么它不接受优化标志?
c++ - 我试过:valgrind,_GLIBCXX_DEBUG,-fno-strict-aliasing;如何调试此错误?
我有一个非常奇怪的错误,我花了几天时间试图弄清楚,所以现在我想看看是否有人有任何评论来帮助我理解发生了什么。
一些背景。我正在开发一个软件项目,该项目涉及使用 Boost 1.45 将 C++ 扩展添加到 Python 2.7.1,因此我的所有代码都通过 Python 解释器运行。最近,我对代码进行了更改,它破坏了我们的一个回归测试。这个回归测试可能对数值波动(例如不同的机器)过于敏感,所以我应该解决这个问题。然而,由于这个回归是在产生原始回归结果的同一台机器/编译器上中断的,我将结果的差异追溯到这个数字代码片段(可验证这与我更改的代码无关):
它构造了一些数值表。注意:
- %a prints 提供精确的 ascii 表示
- 左侧(lhs)是 c[3],rhs 是其他 8 个值。
- 下面的输出是 i 的值远离 f, df 的边界
- 该代码存在于 i 上的循环中,该循环本身嵌套了多个层(因此我无法提供一个孤立的案例来重现此代码)。
所以我克隆了我的源代码树,我编译的两个可执行文件之间的唯一区别是克隆包含一些额外的代码,这些代码甚至在这个测试中都没有执行。这让我怀疑它一定是内存问题,因为唯一的区别应该是代码在内存中的位置......无论如何,当我运行这两个可执行文件时,它们产生的差异如下:
您可以看到 c[3] 中的值略有不同,而 rhs 值没有任何不同。因此,一些相同的输入会导致不同的输出。我尝试简化 rhs 表达式,但我所做的任何更改都会消除差异。如果我打印 &c[3],那么差异就会消失。如果我在我可以访问的两台不同的机器(linux、osx)上运行,则没有区别。这是我已经尝试过的:
- valgrind(在 python 中报告了许多问题,但在我的代码中没有任何问题,也没有任何看起来严重的问题)
- -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_ASSERT -D_GLIBCXX_DEBUG_PEDASSERT -D_GLIBCXX_DEBUG_VERIFY(但没有断言)
- -fno-strict-aliasing (但我确实从 boost 代码中得到了别名编译警告)
我尝试在有问题的机器上从 gcc 4.1.2 切换到 gcc 4.5.2,这种特定的、孤立的差异消失了(但回归仍然失败,所以让我们假设这是一个不同的问题)。
我能做些什么来进一步隔离问题吗?以供日后参考,有没有什么方法可以更快的分析或理解这类问题?例如,鉴于我对 lhs 变化的描述,即使 rhs 没有变化,你会得出什么结论?
编辑:问题完全是由于-ffast-math
.