Tag: g ++

GCC可以从最终输出中消除什么样的死代码?

我一直被告知编译器足以消除死代码。 我编写的大部分代码在编译时都知道很多信息,但代码必须以最通用的forms编写。 我不知道任何assembly,所以我无法检查生成的assembly。 什么样的代码可以在最终的可执行文件中有效消除? 几个例子但不限于 f(bool b){ if(b){ //some code }else{ //some code } } f(true); ////////////////////////// template f(){ if(b){ //some code }else{ //some code } } f(); /////////////////////////// 如果f定义在其他客观代码中并且被调用的f(true)在main中,那该怎么办? 链接时间优化会有效消除死代码吗? 什么是编码样式/编译器选项/技巧,以促进死代码消除?

程序g ++在路径中找不到

我正在使用Eclipse进行C项目。 我通过转到New-> C project-> Executable-> Empty Project,Linux gcc toolchain创建了一个新项目。 当我添加一个新的.c文件时,我得到“程序’g ++’在路径中找不到”。 我怎么摆脱这个? 我甚至没有使用C ++。

GCC:-O3和-Os之间的差异

我对GCC -O3标志非常熟悉,但是它与-Os有什么不同,在哪种情况下我们应该优先选择其他?

为什么“字符串数组的初始化字符串太长”在C中编译得很好而不是在C ++中编译?

以下程序使用警告在C中编译好,但在C ++中编译失败。 为什么? 是什么原因? #include int main(void) { char a[5]=”Hello”; a[0]=’y’; puts(a); for(int i=0;i<5;i++) printf("%c",a[i]); return 0; } 警告: Warning:[Error] initializer-string for array of chars is too long [-fpermissive] enabled by default 但是如果程序编译为C ++程序,则C ++编译器会出现以下错误: [Error] initializer-string for array of chars is too long [-fpermissive] 我正在使用GCC 4.8.1编译器。

如何在x86上捕获数据对齐错误(在Sparc上也称为SIGBUS)

即使在i386上,是否有可能捕获数据对齐错误? 也许通过设置i386特定的机器寄存器或类似的东西。 在Solaris-Sparc上我在这种情况下收到一个SIGBUS,但在i386上一切都很好。 环境: 32位应用程序 Ubuntu Karmic gcc / g ++ v4.4.1 编辑 :这就是为什么我这样问: 我们的应用程序在使用SIGBUS的Sol-Sparc上崩溃了。 出于调试的目的,我会尝试在i386平台上获得类似的行为。 我们的Sol-sparc机器非常慢,因此编译和调试需要很长时间。 我们的i386机器速度令人难以置信(8核,32G内存)。 即使在i386平台上,数据对齐错误也会带来性能损失。 因此,我想尽可能修复数据对齐错误。

常见C ++优化技术列表

我可以获得一系列常见的C ++优化实践吗? 我的意思是优化是你必须修改源代码才能更快地运行程序,而不是改变编译器设置。

我可以让GCC警告将过多的类型传递给函数吗?

以下是一些明显有缺陷的代码,我认为编译器应该发出诊断信息。 但是gcc和g++都没有,即使有我能想到的所有警告选项: -pedantic -Wall -Wextra #include short f(short x) { return x; } int main() { long x = 0x10000007; /* bigger than short */ printf(“%d\n”, f(x)); /* hoping for a warning here */ return 0; } 有没有办法让gcc和g++对此发出警告? 另外,您是否有另一个编译器在默认情况下或在相当常见的额外警告配置中对此进行警告? 注意:我正在使用GCC(C和C ++编译器)版本4.2.4。 编辑:我刚刚发现gcc -Wconversion可以解决这个问题,但g++的相同选项却没有,我在这里真的使用C ++,所以我需要一个g++解决方案(我现在想知道为什么-Wconversion没有似乎是这样)。 编辑: http : //gcc.gnu.org/bugzilla/show_bug.cgi? id = 34389建议这可以在g++ 4.4修复……也许? 我还不清楚它是否是同一个问题和/或修复是否真的出现在那个版本中。 也许有4.3或4.4的人可以试试我的测试用例。