何C99さと考えられる有害は対応していない[定休日]
-
19-09-2019 - |
質問
普段、CのコードC89、一部の機能のC99のよう intxx_t
または __VA_ARGS__
または snprintf
は非常に有用できることが期待されます。
しっからの要求事項C89にC99かを知りたいと思いるのC99ロセスにおいて広く支持、あるいは幅広くサポートされていても考えもなります。
知っていたことができるのかチェック対象のコンパイラのインターネットで提供されるこのように狭いサポートを多くしたものではありますがオープンソースソフトウェアかを広げます。
たとえば、Solaris(suncc)コンパイラは、gccがありますがその他のコンパイラこの移動にしたいとの互換性の少ないです。
例えば、私たWindowsではないことは何も知らなかっWindowsコンパイラが、実際のところをWindowsに対応しています。
解決
多数のC99の特徴はオプションで欠な技術的に適用されますんで区別します。
うーん、勝てない
<stdint.h>
, がありま オープンソース版のstdint.hのためのMicrosoft.場合でも、ファイルが実装され、多くの種類のみである。複雑な想よる支援を行います。
長識別子およびワイド文字でき問題点です。
他のヒント
goto
はまだ有害に考えられてます。
どういうわけか、私が収集した、の4 の投票ダウン。私は軽さを追加するには、上記のステートメントを発表し、その背後にある概念についての唯一の30%の深刻なと思います。
私はダウン投票はプログラミング言語の歴史を理解していない若者からです期待しています。ないのすべての単一ののgoto
悪ですが、-比べて、私は構造化された文と同様に多くのgoto
文を置き換えるために合理的かつ生産的である-it(FORTRAN 66の何百万行)に取り組んできた100%純粋なスパゲッティコードに可能な限り(for
、while
、do .. while
、switch
)。それは複雑さを回避するときしかし、時にはgoto
は、このような複数のネストされたループから抜け出すために余分なフラグ変数として、だけで結構です。
さて、gccは基本的に関係なく、あなたがターゲットとしているどのデスクトップOSのgccのされようとしている。
のVisual C ++は、主にC ++コンパイラであること、C99の仕様とそれほど心配していないです。 stdint.hお気に入りのintxx_tマクロを宣言しません。 __VA_ARGS__
が可能です。 _Bool、_Complex、および_Pragmaは、Microsoft Visual C ++コンパイラに実装されていません。私は多分VC2010がそれらを扱うのにprintfの/ scanf関数で%フィールドは、実装されていないかなり確信しています。 snprintfのは存在するが、先頭にアンダースコアとは若干異なる意味を持っています。
短い答え:「簡単に」C99機能はコンパイラの文法を変更したり、標準ライブラリをreplumbingせずに実装することで、より多くの可能性が高いVC ++は、それをサポートすることです。 C99とC ++との間に矛盾がある場合、C ++が勝つことを期待します。
ランタイムのsizeofは、コンパイラの作家の悪夢です。だから私は、有害で検討します。
realloc
は、ポータブルではありませんので、はglibcは、C99準拠realloc(ptr, 0)
を実装していません。
restrict
は、C99のキーワードとなりました。これは、ユーザーの名前空間を侵害実装です。あなたが単語restrict
が含まれている有効なC89プログラムを持っている場合、あなたはそれがC99で動作させるために、あなたのプログラムを変更する必要があります。言い換えれば:なし下位互換性を保ちます。彼らは、下位互換性を破るつもりだったならば、彼らは最初の標準からgets
を削除している必要があります。
彼らはMacOS Xの10.6.2にGCC 4.2.1が提供されているように見えるんが<tgmath.h>
からタイプの一般的な数学関数は必ずしも広く実装されていません。