6

-ansiこのプログラムがフラグとフラグを使用しても GCC でコンパイルされる正当な理由はあり-pedanticますか?

#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.

2 つの問題があります。

  1. round()ISO 準拠モードの C++ では使用できないはずです (C99 に由来するため)。
  2. この場合に利用可能であったとしても、名前空間round()からのみ利用可能であるべきですstd

私が間違っている?

4

3 に答える 3

2

これはバグです。それは驚くほど長い間存在しています。どうやら、それを修正したいという集団的欲求が十分ではなかったようです。math.h から C99 関数を採用する新しいバージョンの C++ が間もなく登場するため、これが修正される可能性は低いと思われます。

于 2009-12-12T02:37:29.470 に答える
0

私はここでベースから外れているかもしれませんが、すべてのライブラリを厳密な ANSI 準拠モードに切り替えるのではなく、 gcc の -ansi フラグがコード構成 (つまり、GCC言語拡張機能を無効にする) に適用されませんか?

于 2009-12-10T17:44:57.557 に答える
-1

標準では、定義が必要なシンボルと、それらが定義されているヘッダーが指定されていると思います。私は、他のシンボルを定義してはならないという基準が規定されているとは思いません。もっと言えばstd::round()、自由round()に定義できるシンボルと呼ばれるもので定義されません。

于 2009-12-10T17:47:46.297 に答える