标签: compiler-options

如果指定了EHsc和EHa会发生什么

我正在处理遗留代码.

为了修复一些bug,我必须给EHa一些文件.我在测试时测试了整个项目的EHsc和EHa.这解决了我的问题,但发出警告称编译器正在用EHa覆盖EH.(选项的顺序是:/ EHsc/EHa)仅当正在构建需要EHa的文件时才会出现此警告.它不会出现在只需要EH的源文件中.

<name of the file that needs EHa>\cl : warning D9025 : overriding '/EHs' with '/EHa'
Run Code Online (Sandbox Code Playgroud)

我的问题是,这个警告是否说明实际发生了什么?EHa仅适用于实际需要EHa的源文件吗?(其他文件是否需要使用EHsc构建EH?)

谢谢.

c++ compiler-warnings compiler-options visual-c++

4
推荐指数
1
解决办法
2255
查看次数

什么是特定的GCC标志,它为内联汇编参数打开立即值传播?

请考虑以下x86代码示例:

#include <stdlib.h>

static int i;

static inline __attribute__((always_inline)) test(int x)
{
    asm volatile("mov %1, %0" : "=r"(i): "i"(x));
}

int main(void)
{
    test(5);

    return i;
}
Run Code Online (Sandbox Code Playgroud)

如果我用它构建它:

gcc -O test.c
Run Code Online (Sandbox Code Playgroud)

它建立得很好.

如果我用它构建它(没有优化):

gcc test.c
Run Code Online (Sandbox Code Playgroud)

它在组装阶段失败,因为该值'5'不会作为直接值传播到内联函数测试,因此我们使约束失败.

我希望能够在不启用其他非相关优化的情况下编译此代码,以便更轻松地进行调试.

从理论上讲,-O它只是一个捷径,可以在GCC手册中记录一系列GCC优化选项.不幸的是,我无法找到打开此行为的特定GCC标志.

有任何想法吗?

澄清:为了减轻任何疑问,代码片段只是一个例子.除了展示我想要做的事情之外,它本身并没有多大意义.实际的用例涉及一个自定义处理器上的指令,该指令只能立即作为我试图在C结构中包装的参数.一个宏确实可以做到这一点,但是遭受了宏的所有通常的缺点,因此我试图避免它.

更新:对于那些想知道的人,一个宏也不会工作.似乎内联函数根本不起作用.例如,这也不起作用:

void foo (void)
{
  int i = 6;

  asm volatile ("" : : "i" (i));
}
Run Code Online (Sandbox Code Playgroud)

我还修正了问题标题以反映这一点.

c gcc inline-assembly compiler-optimization compiler-options

4
推荐指数
1
解决办法
2763
查看次数

"使用调试DCU"的编译器选项?

在我写的一个组件中,我想包括自动检测已注册的图像格式,但它是一个只有在禁用Use Debug DCU的编译器选项时才有效的解决方案.

真正想知道的是这个解决方案的替代方案,它不涉及编译器选项依赖.

但就目前而言,我只想知道如何在运行时检查是否设置了Use Debug DCU的编译器选项.

delphi compiler-options

4
推荐指数
1
解决办法
2753
查看次数

-march = native归结为什么?

当前,我们在同一硬件上编译和运行代码,因此使用-march=nativeflag。

我们将继续在此硬件上运行,但在不同的体系结构上进行编译。因此,我需要替换native为等效于当前硬件的任何东西。

有没有办法gcc报告native特定硬件上的等效值?

gcc compiler-options

4
推荐指数
1
解决办法
71
查看次数

_DEBUG 何时何地定义?

我的头文件之一中有以下示例代码:

#ifdef _DEBUG
#define _DEBUG_NEW_REDEFINE_NEW 0
#include "debug_new.h"
#else
#define DEBUG_NEW new
#endif
Run Code Online (Sandbox Code Playgroud)

包含此头文件的应用程序是使用带-DDEBUG选项的 gcc 编译器编译的。

问题:

_DEBUG因为-DDEBUG选项而定义的吗?

debugging gcc compiler-options c-preprocessor

3
推荐指数
1
解决办法
2184
查看次数

可以为 clang 或 gcc 配置 constexpr 递归限制吗?

可以通过 clang 或 gcc 的命令行选项配置 constexpr 编译时递归限制吗?如何?

gcc clang compiler-options constexpr

3
推荐指数
1
解决办法
733
查看次数

用于针对XP的Visual Studio 2013的Visual C++编译器标志

我想用针对XP环境的Visual Studio 2013创建一个C++程序,我知道Project Properties - > Configuration选项卡中的UI选项来设置Platform Tool set top Windows v120_xp,我想用命令实现它行选项.怎么做.

对于visual studio 2012,我知道这个选项

设置CL =/D_USING_V110_SDK71 _;%CL%

我正在寻找类似的选项是Visual Studio 2013.你能帮忙吗?

c++ compiler-options visual-studio-2013

3
推荐指数
1
解决办法
1855
查看次数

我可以为gfortran使用哪些gcc编译器选项

我研究了“ 选项摘要”,gfortran但没有找到用于检测整数溢出的编译器选项。然后我在-fsanitize=signed-integer-overflow 这里找到了GCC(GNU编译器集合)标志选项并在调用时使用了它gfortran。它有效-可以在运行时检测到整数溢出!

那么-fsanitize=signed-integer-overflow在这里做什么呢?只是添加到gfortran某些检查整数溢出的机器级代码生成的机器代码中?

GCC(GNU编译器集合)标志选项gfortran编译器选项之间有什么关系 ?我可以为gfortran, g++etc 使用哪些gcc编译器选项?

c gcc fortran gfortran compiler-options

3
推荐指数
1
解决办法
436
查看次数

多个 CMake 目标的 target_compile_definitions?

有人 告诉我,CFLAGS直接在 CMake 中进行设置是不好的做法,相反,我应该使用该target_compile_definitions()命令。

好的,但是 - 如果我想对多个(独立)目标使用相似/相同的定义怎么办?我不想一遍又一遍地重复自己。

idioms dry cmake compiler-options

3
推荐指数
1
解决办法
3464
查看次数

如何在RPG或CL程序中为激活组设置编译器选项?

有没有办法为程序源指定,在编译期间应该使用哪些激活组选项?

在as/400上的大多数程序中,我们需要更改激活组的处理(因为默认行为根本没有用...).每次我编的程序之一,我一定要记得设置编译器选项(这是在PDM:进入14,打F4,变化DFTACTGRP来自*YES*NO,打enter,变化ACTGRP*NEW或者*CALLER,这取决于程序).因此,我们在开始时有很多带有注释的程序,有大量的惊叹号,提醒程序员这样做.是的,有时候你会忘记.

有没有诀窍,所以你不必记住自己?

rpg compiler-flags rpgle compiler-options ibm-midrange

2
推荐指数
1
解决办法
4700
查看次数