问题标签 [gcc4]
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.
c++ - 强制 GCC 4.x 将 -Wreturn-type 视为错误而不启用 -Werror?
假设我们有以下代码:
并假设要从 GCC 版本 4.2.1 编译 C++ 编译器(而不是 C 编译器),并带有 options -Wreturn-type -Werror=return-type
。如果上面的代码在没有先取消注释上面的行的情况下按原样编译//#define USE_CXX_CLASS
,那么您将看到警告但没有错误:
但如果该//#define USE_CXX_CLASS
行未注释,则警告将被视为错误:
是的,一个是非成员函数(案例 #2),另一个是 C++ 函数(案例 #1)。IMO,那应该没关系。我希望这两个条件都被视为错误,并且我不想在这个时间点添加-Werror
或-Wall
(可能稍后会这样做,但这超出了这个问题的范围)。
我的子问题是:
- 是否有一些我缺少的 GCC 开关应该可以工作?(不,我不想使用
#pragma
's。) - 这是在最新版本的 GCC 中已解决的错误吗?
作为参考,我已经提出了其他类似的问题,包括以下内容:
c++ - 本地实现的接口引用
请考虑以下代码:
在 GCC 4.4.1(使用-O2
)下,对的调用B::go()
被内联(即,没有发生虚拟调度)。这意味着编译器承认a_ref
确实指向了一个B
类型变量。B
引用可用于指向 a ,C
但编译器足够聪明,可以预见到情况并非如此,因此它完全优化了函数调用,内联函数。
伟大的!这是一个令人难以置信的优化。
但是,那么,为什么 GCC 在以下情况下不做同样的事情呢?
有任何想法吗?其他编译器呢?这种优化常见吗?(我对这种编译器洞察力很陌生,所以我很好奇)
如果第二种情况有效,我可以创建一些非常棒的模板,例如:
在许多情况下,这些模板可用于避免虚拟调度:
实施它是否可行?(不要继续说这是一个微优化,因为它很可能是一个巨大的优化..)
- 编辑
我只是注意到问题与static_ptr<>
我暴露的问题无关。指针类型被保留,但它仍然没有内联。我猜 GCC 并没有深入到找出 static_ptr_container<>::value 不是引用也不是指针的程度。对于那个很抱歉。但这个问题仍然没有答案。
- 编辑
我已经制定了一个static_ptr<>
真正有效的版本。我也稍微改了一下名字:
唯一的弱点是用户必须访问ptr->value
才能获取实际对象。重载operator ->()
在 GCC 中不起作用。任何返回对实际对象的引用的方法(如果它是内联的)都会破坏优化。太遗憾了..
visual-studio-2008-sp1 - 强制 VS2008 发出类似于“警告:有符号和无符号整数表达式之间的比较”的 GCC 警告
与从 'int' 转换为 'size_t'中描述的内容相同,可能会改变结果的符号 - GCC , C,我想确保我在 GCC 4.2.1 下收到的警告也被标记在 32 位和 64 位编译下的 VS2008 SP1 下,而不是在 GCC 下禁用警告以适应 VS2008。
例如,在 64 位条件下的 GCC 4.2.1 下,我们在 -Wall 条件下看到以下警告:
GCC 警告是:
但它不会被 VS2008 SP1 64 位编译器标记,无论我尝试什么类型的编译指示,无论我使用 /W3 或 /W4,或 /w3 some_warning_number或 /w4 some_warning_number等启用什么。
现在,我不想降低 GCC 的警告级别或禁用警告,因为他们有很好的理由在那里发出警告。所以我希望 VS 构建在启用 /WX 时以类似的方式失败。这是我必须忍受的事情,还是有一些警告可以在 VS2008 上解决问题?
编辑:警告显示为 32 位版本,但不使用 64 位版本,使用相同的编译器选项集,如下所示:
编辑#1:看到这可能是 Visual Studio 的特质,我发布到Visual C++ 开发人员中心 - 警告 C4018: '<' : signed/unsigned mismatch isemitting for 32-bit but not 64-bit compiler under VS2008 SP1 on 64位窗口。
编辑#2:我被指示从Visual C++ 开发人员中心发布到 Microsoft Connect ,今天(2011-01-11)微软回复了我的问题并将其验证为编译器问题:他们表示该问题将添加待在未来版本中修复的积压工作:Microsoft Connect - 警告 C4018: '<' : signed/unsigned mismatch is only sent between like-sized types。
c++ - Boost multi_index_container,按标签获取索引导致编译器错误
所以,我试图涉足multi_index_container
并且遇到了一个相当奇怪的编译器错误,首先这是演示我的问题的最简单的例子(我可能错过了一些愚蠢简单的东西)......
g++ (gcc 4.4.4, linux) 报告的错误是:
所以这工作正常,直到我将容器转换为类模板,在此之后,我得到这个错误,并且无法弄清楚为什么..
任何想法将不胜感激...
c++ - 无法将流代码与 gcc 链接
我在编译以下代码时遇到问题:
编译:
编译给出了一些警告:
生成的二进制文件似乎可以执行:
输出文件已创建但为空!?!
我将非常感谢有关问题可能是什么的任何指示。
gcc - gcc-4.4.0-1aix5.3 缺少依赖 libgmp、libmpfr
我正在尝试在 Aix 5.3 系统(64 位)上安装 gcc-4.4.0-1。我已经安装了 MPFR 2.0 和 LIBGMP 4.3,并且可以在 /usr/lib 中看到 libgmp.a 和 libmpfr.a。我还使用了 --enable-shared 选项,可以在 /usr/lib 中看到 libgmp.so.3 和 libmpfr.so.4。LIBPATH 包含 /usr/lib。
尽管如此,我仍然被以下错误困住了几个小时:-
任何人都可以指出问题是什么以及我需要采取哪些步骤?
compiler-optimization - GCC -O2 与 -march / -ftree-vectorize
我正在尝试针对在两个图像( 2000Hx3000W 和 6800Hx8500W )上执行 sobel 内核卷积的程序的几个编译器开关。有一些我无法解释的观察结果,以下是数据 - 编译器标志和以秒为单位的时间(请关注最后一列,因为它表示较大图像的 Y 轴上的卷积):
考虑到我正在运行的机器是 AMD barcelona,我预计 -O2-march=barcelona 会稍微好一些。关于为什么 -O2 比 -O2 -march 更好的任何想法?
关于-ftree-vectorize,它应该能够并行运行指令,因为我的循环是无依赖的。但是,-O2-ftree-vectorize-march=barcelona 是最好的,当单独存在合理的时间差异时。
如果我能理解这种行为,那就太好了。
问候,
萨扬
gcc - 通过使用 gcc 选项的不同组合来调整程序的性能
据我所知,有一个项目旨在探索 gcc 选项(cflag)的最佳组合以获得程序的最佳性能。
如果我没记错的话,他们是在随机测试中进行的。
有人可以提醒我项目的名称。
由于项目停止,很难从谷歌挖掘。
谢谢!