問題タブ [c99]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - C99 は C89 と下位互換性がありますか?
私は古いスタイルの C に慣れており、最近 c99 の機能を調べ始めたばかりです。1 つだけ質問があります。プログラムで c99 を使用し、c99 フラグを使用gcc
して以前の c99 ライブラリとリンクすると、プログラムは正常にコンパイルされますか?
では、古い C89 に固執するか、進化する必要がありますか?
c - 最も有用なユーザー作成の C マクロ (GCC では、C99 も)?
あなたの意見では、どのCマクロが最も役立つと思いますか? Cでベクトル演算を行うために使用する次のものを見つけました。
それは次のように機能します:
c - 後で宣言された C 参照エンティティの関数本体をインライン化できます
ヘッダー ファイルに 2 つのインライン関数があるとします。
「bar」が後で宣言されたとしても、C99 コンパイラが「foo」をインライン化すると仮定できますか? function body to large のような他の内部ルールがトリガーされないと仮定します。
C99がこれをオプションとして残していても、cコンパイラの実装はこれを行っていますか(一般的なものはIntel-C/Sun Studio/MSVCおよびgccと言います)?
c - Ansi C標準チェックを強制するGCCオプション?
ANSI C (C99) の警告/エラーを強制するには、どの gcc オプションを使用すればよいですか? gcc (GCC) 3.4.2 (mingw スペシャル)
私は使用しています: gcc -pedantic -ansi -std=c99 これは正しいですか?
c - 可変引数マクロで引数を反復処理することは可能ですか?
C99またはGCC拡張機能を使用して、可変引数マクロに渡された引数を反復処理できるかどうか疑問に思っていましたか?
たとえば、構造体とそのフィールドを引数として受け取り、構造体内の各フィールドのオフセットを出力する汎用マクロを作成することは可能ですか?
このようなもの:
c - C99:'for'のブロックの先頭で変数を宣言できますか?
次のコードはC99に従って合法ですか?
3行目より前に、変数xが宣言されていなかったと想定できます。
今まで私は以下を見つけただけですが、これで十分だとは思いません:
ブロックを使用すると、一連の宣言とステートメントを1つの構文単位にグループ化できます。自動保存期間を持つオブジェクトの初期化子、およびブロックスコープを持つ通常の識別子の可変長配列宣言子が評価され、宣言が行われるたびに値がオブジェクトに保存されます(初期化子なしのオブジェクトに不確定な値を格納することを含む)それがステートメントであるかのように実行の順序で、そして宣言者が現れる順序で各宣言内に到達しました。
そのPDFの145ページから。
c - 複合リテラルで匿名共用体を割り当てることは (合法的に) 可能ですか?
私は構造体を持っています:
次のような複合リテラルを割り当てようとすると、
gcc は次のような警告を表示します。
あいまいな可能性のある型に値を代入するだけで、コンパイラが確信を持てないことは明らかです。ただし、より正確に指定しようとしても、次のようになります。
私は得る:
(union <union name>)
前に置くとうまくいくかもしれないと読んだことi:
があります。しかし、私は匿名の組合を持つことを好みます。それを行う方法はありますか?
c - 有害またはサポートされていないと見なされるC99機能
私は通常C89でCコードを記述しますが、C99のいくつかの機能(intxx_t
または__VA_ARGS__
またはsnprintf
)は非常に便利であり、さらに重要になる可能性があります。
C89からC99までの要件をさらに検討する前に、C99のどの機能が広くサポートされているのか、どの機能が広くサポートされていないのか、あるいは有害であるとさえ考えられているのかを知りたいと思いました。
ターゲットコンパイラのサポートを確認するだけでよいことはわかっていますが、これによりサポートが大幅に狭まります。これはオープンソースソフトウェア用であるため、より幅広いサポートが必要です。
たとえば、Solaris(suncc)コンパイラとgccを使用していますが、わずかな労力で互換性を維持できる一方で、他のコンパイラを邪魔にならないようにする可能性があります。
たとえば、私はWindowsで作業したことはなく、Windowsコンパイラについても何も知りませんが、Windowsの互換性を維持することをお勧めします。
c - Visual Studio 2008ANSICに制限
「C99」(ANSI C)コードのみを実行できるように、MicrosoftVisualStudioを制限したいと思います。誰かが私にいくつかのガイドラインを与えることができますか?