相关疑难解决方法(0)

如何打开(字面上)所有GCC的警告?

我想启用 - 字面上 - GCC 所有的警告.(你会觉得这很容易......)

  • 你认为-Wall可能会有所作为,但不是!仍然需要-Wextra.

  • 你认为-Wextra可能会有所作为,但不是!并非此处列出的所有警告(例如-Wshadow)都已启用.我仍然不知道这份清单是否全面.

我如何告诉海湾合作委员会启用(不是,不是,或者是!)所有警告?

c++ gcc warnings compiler-warnings gcc-warning

177
推荐指数
6
解决办法
6万
查看次数

C++编译错误?

我有以下代码:

#include <iostream>
#include <complex>
using namespace std;

int main() {
    complex<int> delta;
    complex<int> mc[4] = {0};

    for(int di = 0; di < 4; di++, delta = mc[di]) {
        cout << di << endl;
    }

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

我希望它输出"0,1,2,3"并停止,但它会输出一系列无穷无尽的"0,1,2,3,4,5 ......"

看起来比较di<4效果不好并且总是返回true.

如果我只是评论出来,delta=mc[di],我会像往常一样得到"0,1,2,3".无辜任务有什么问题?

我正在使用带有-O2选项的Ideone.com g ++ C++ 14.

c++ gcc undefined-behavior

74
推荐指数
4
解决办法
5433
查看次数

gcc优化标志-O3使代码比-O2慢

我发现这个主题为什么处理排序数组比未排序数组更快?.并尝试运行此代码.而且我发现了奇怪的行为.如果我使用-O3优化标志编译此代码,则需要2.98605 sec运行.如果我用-O2它编译1.98093 sec.我尝试在同一环境中的同一台机器上运行此代码几次(5或6),我关闭所有其他软件(chrome,skype等).

gcc --version
gcc (Ubuntu 4.9.2-0ubuntu1~14.04) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Run Code Online (Sandbox Code Playgroud)

那么请你能解释一下为什么会这样吗?我阅读gcc手册,我看到-O3包括-O2.谢谢你的帮助.

PS添加代码

#include <algorithm>
#include <ctime>
#include <iostream>

int main()
{
    // Generate data
    const unsigned arraySize = 32768;
    int data[arraySize];

    for (unsigned …
Run Code Online (Sandbox Code Playgroud)

c++ optimization gcc

18
推荐指数
1
解决办法
5180
查看次数

为什么相同的代码在不同的机器上产生两个不同的 fp 结果?

这是代码:

#include <iostream>
#include <math.h>

const double ln2per12 = log(2.0) / 12.0;

int main() {
    std::cout.precision(100);
    double target = 9.800000000000000710542735760100185871124267578125;
    double unnormalizatedValue = 9.79999999999063220457173883914947509765625;
    double ln2per12edValue = unnormalizatedValue * ln2per12;
    double errorLn2per12 = fabs(target - ln2per12edValue / ln2per12);
    std::cout << unnormalizatedValue << std::endl;
    std::cout << ln2per12 << std::endl;
    std::cout << errorLn2per12 << " <<<<< its different" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

如果我在我的机器上尝试 ( MSVC),或者在这里( GCC):

errorLn2per12 = 9.3702823278363212011754512786865234375e-12
Run Code Online (Sandbox Code Playgroud)

相反,这里GCC):

errorLn2per12 = 9.368505970996920950710773468017578125e-12
Run Code Online (Sandbox Code Playgroud)

这是不同的。是由于机器 …

c++ floating-point floating-accuracy

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