-ansi
と-pedantic
フラグがあっても、このプログラムがGCCでコンパイルされる理由はありますか?なぜGCCはansiとペダンティックフラグがあってもC++でのround()の使用を許可していますか?
#include <cmath>
int main (int argc, char *argv [])
{
double x = 0.5;
return static_cast<int>(round(x));
}
これはg++ -ansi -pedantic -Wall test.cpp -o test
できれいに(でも何の警告を、)コンパイルしません。
:(それはC99から来ているので)
round()
がround()
が、この場合に利用可能であったとしても、それが唯一べき- ISO準拠のモードではC++で利用可能であるべきではありませんそうでしょう
std
名前空間
私は間違っていますか?
gccのマニュアルページには、ansiフラグが設定されているときに関数が定義されていないが、ansi関数しか定義されていないことが記述されています。 – josefx
@josefx:D. Shawleyへのコメントを参照してください。さらに調査した結果、ライブラリ拡張は "整形式プログラムの動作を変える"ことができないことを学びました。したがって、ライブラリに 'round()'拡張を追加することは不正です。これは、 '-ansi'フラグの動作をmootにします。 –