2016-07-21 22 views
28

-Wlong-long gcc警告の理由は何ですか?gccに長い間警告が表示されるのはなぜですか?

gccのmanページから:

-Wlong-long 
     Warn if long long type is used. This is enabled by either -Wpedantic or -Wtraditional in ISO C90 and C++98 modes. To inhibit the warning messages, use -Wno-long-long. 

私はそれを理解し、long longは、少なくとも64ビット(事実上、それは常に、少なくとも今日のコンパイラで64ビットである)であることが必要です。これはISO C90やC++ 98では当てはまりませんでしたか?long longを使用しない別の理由がありますか?

は私がint64_tや友人などの程度<stdint.h>タイプを知っているが、いくつかのそれほど古くないコンパイラ(例えばVS2005、およびグリーンヒルズARM 3.5)<stdint.h>を提供していない、と私はlong longがために(少なくとも)64ビットのだろうと思いましたそれらと新しいツールチェーン。

+0

'stdint.h'を持たないコンパイラはC99に準拠していないので、' long long'がまったくないというオッズがあります。 (彼らがGCCの古いバージョンでない限り) – zwol

+0

パトリックの "not-so-old"コンパイラは、90年代のgccと同じカテゴリーにあるようです - 長い間、 'stdint.h'なしで90年代の大半を通じて、C99がまだ書かれていないという言い訳に加えて、「普通の」CPUが64ビットの整数レジスタを持たないという言い訳があるので、基本的なC型のうち64ビット整数が欠けている何らかの意味がありました。) –

+0

@ WumpusQ.Wumbley:Cは8ビットプロセッサで使用できるように設計されています(1980年代には頻繁に使用されていました)。 4つのステップで長い追加を行うことはやや面倒でしたが、数字が16777215より大きくないことが分かっていても、1つの量で操作できるという利便性は、3つではなく4つのステップを使用することによるパフォーマンスの低下に値するものでした。 8バイトタイプを使用することが正当化されるケースはずっと少なくなります。 IMHO、適切な救済策は、少なくとも独立した実装では、「長い間」長いオプションをオプションにすることでした。 – supercat

答えて

32

ISO C90とC++ 98にはまだlong longタイプがありませんでした。 ISO C99およびC++ 11でのみ追加されています。

GCCは標準化の前に拡張として提供しましたが、

+19

...同じセマンティクスで標準化されたgcc拡張のまれな例 –

+0

このような警告を出す理由は、コードがC99以外のコンパイラやC++ 11コンパイラ以外でコンパイルされるのを助けるためです。 – Patrick

+6

@Patrickはい、私は、 '-ansi -pedantic'で有効になっているすべての警告を自分の' -Wfoo'オプションで表すべきだと誰かが決めたので、そのオプションが存在すると思います。実際に '-Wlong-long'を単独で使う理由はありません。ああ、しかし、「長い間長い」というのは意味をなさない。 –

関連する問題