Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Optimization 威尔g++;做正确的事吗;?_Optimization_G++ - Fatal编程技术网

Optimization 威尔g++;做正确的事吗;?

Optimization 威尔g++;做正确的事吗;?,optimization,g++,Optimization,G++,在下面的代码段中,我的目的是从各种可能性中强制输入参数的一些特定值。我使用的是关闭了所有优化的g++版本4.7.2,我的问题是编译器是否遵守了预期的执行顺序 int MP3Filter::checkBitrate(int nBitrate) { // ########################################## // this assumes a specific order of execution // ?? will the compiler

在下面的代码段中,我的目的是从各种可能性中强制输入参数的一些特定值。我使用的是关闭了所有优化的g++版本4.7.2,我的问题是编译器是否遵守了预期的执行顺序

int
MP3Filter::checkBitrate(int nBitrate)
{
    // ##########################################
    // this assumes a specific order of execution
    // ?? will the compiler mess with this ??

    if      (nBitrate <= 32)    return 32;
    else if (nBitrate <= 40)    return 40;
    else if (nBitrate <= 48)    return 48;
    else if (nBitrate <= 56)    return 56;
    else if (nBitrate <= 64)    return 64;
    else if (nBitrate <= 80)    return 80;
    else if (nBitrate <= 96)    return 96;
    else if (nBitrate <= 112)   return 112;
    else if (nBitrate <= 128)   return 128;
    else if (nBitrate <= 160)   return 160;
    else if (nBitrate <= 192)   return 192;
    else if (nBitrate <= 224)   return 224;
    else if (nBitrate <= 256)   return 256;
    return 320;
}
int
MP3Filter::校验比特率(int-nBitrate)
{
// ##########################################
//这假定有一个特定的执行顺序
//?编译器会弄乱这个吗??

如果(nBitrate我想你可以告诉g++用-O0标志关闭所有优化。你关心优化器吗?这段代码没有什么让我觉得它无法正确编译。

我想你可以告诉g++用-O0标志关闭所有优化。你关心优化器吗?什么都不关心但是,这段代码让我觉得它无法正确编译。

优化应该与这段代码无关。编译器需要生成与语言标准要求的行为一致的代码,在这种情况下,函数可以为任何特定对象返回的值没有灵活性ar参数值

编译器可以生成它喜欢的任何代码,只要函数返回所需的结果。如果您只关心从函数中获得正确的结果,那么语言标准已经涵盖了这一点。要么g++做得对,要么g++有错误。(我不知道这方面有任何g++错误,如果有这样的错误,我会感到惊讶。)

如果您关心的不是函数返回正确的结果(例如,特定的CPU指令序列),那么(a)我想知道您为什么关心,以及(b)C++不是一种允许你强加这种约束的语言。如果指令序列对你很重要,你可以考虑使用汇编语言。
您到底关心什么?

优化应该与此代码无关。编译器需要生成符合语言标准要求的代码,在这种情况下,您的函数可以为任何特定参数值返回的值没有灵活性

编译器可以生成它喜欢的任何代码,只要函数返回所需的结果。如果您只关心从函数中获得正确的结果,那么语言标准已经涵盖了这一点。要么g++做得对,要么g++有错误。(我不知道这方面有任何g++错误,如果有这样的错误,我会感到惊讶。)

如果您关心的不是函数返回正确的结果(例如,特定的CPU指令序列),那么(a)我想知道您为什么关心,以及(b)C++不是一种允许你强加这种约束的语言。如果指令序列对你很重要,你可以考虑使用汇编语言。
你到底担心什么?

你到底希望编译器弄糟什么?你不应该在意G++是否对某些代码重新排序,只要发出的代码符合C标准预测的行为。如果你问“编译器可以测试
nBitrate@JonathanWakely吗?虽然如果它想@sehe,哎哟,这是非常刺痛的。标准非常清楚if
if else
的语义:)你到底希望编译器弄糟什么?你不应该在意G++是否对某些代码重新排序,只要发出的代码符合C标准预测的行为“编译器可以测试
nBitrate@JonathanWakely吗?虽然如果它想@sehe,哎哟,这是非常刺痛的。标准非常清楚if
if else
的语义:)无论如何,默认情况下优化是关闭的,
-O0
只有在其他
-O
标志取消其效果后才有用。我使用了太多不同的编译器,默认了太多不同的东西,以至于我明确告诉他们我的愿望。gcc一直都是这样吗?是的,一直都是这样。你必须解释一下它要求优化。无论如何,默认情况下优化是关闭的,
-O0
只有在其他
-O
标志撤销其效果后才有用。我使用了太多不同的编译器,默认了太多不同的东西,我明确地告诉他们我的愿望。gcc一直都是这样吗?是的,一直都是这样例如,您必须明确要求优化。