問題タブ [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.

0 投票する
7 に答える
1379 参照

c - オープンソースプロジェクトでのC99混合宣言とコード?

LinuxカーネルGNOMEなどのオープンソースCプロジェクトでC99混合宣言とコードがまだ使用されていないのはなぜですか?

宣言とコードが混在しているのが本当に好きです。コードが読みやすくなり、変数のスコープを可能な限り狭く制限することで、見づらいバグを防ぐことができるからです。これは、Google forC++によって推奨されています。

たとえば、Linuxには少なくともGCC 3.2が必要であり、GCC3.1はC99混合宣言とコードをサポートしています。

0 投票する
4 に答える
5325 参照

c - C構造の柔軟な配列メンバー

C-std セクション 6.7.2.1 から引用すると、

これは有効な構造宣言です。この種の構文の実用的な使用法を探しています。正確に言えば、この構造は double* を 2 番目の要素として保持するよりも、どのように多かれ少なかれ強力なのでしょうか? それとも、これは「複数の方法で実行できる」別のケースですか?

アルパン

0 投票する
3 に答える
915 参照

c - 「式のステートメントと宣言」は GNU C に固有のものですか?

式のステートメントと宣言はGNU C に固有のものですか? それとも、この機能は C99 標準にも含まれていますか?

0 投票する
6 に答える
8126 参照

c - malloc/free と比較して C99 VLA を使用することは良い考えですか?

C99 VLA を使用するのは良い考えですか? malloc/free と比較して VLA を使用するのが適切なのはどのような場合ですか? (VLAがスタックを爆破するかもしれないので?)

0 投票する
2 に答える
412 参照

c - C99 は UCHAR_MAX > UINT_MAX を許可しますか?

6.3.1.1 状態

符号付き整数型のランクは、精度の低い符号付き整数型のランクより大きくなければなりません。

long long int のランクは long int のランクより大きくなければならず、long int のランクは int のランクより大きくなければならず、それは short int のランクより大きくなければならず、signed char のランクよりも大きくなければならない。


だから、これは当てはまらないでしょうか

0 投票する
3 に答える
3218 参照

c - gccでC89スタイルの変数宣言を強制するには?

ほとんどが C++ で構成され、ほとんどが gcc でビルドされているコード ベースで作業していますが、MSVC でビルドする必要がある場合もあります。Microsoft の C コンパイラは、いくつかのマイナーな拡張機能を備えたほとんどの C89 のままであり、C++/C99 風の混合コードと変数定義をまだサポートしていません。そのため、開発者が gcc で作業しているときに順不同のコード/変数定義を記述しないようにする方法を見つける必要があります。そうしないと、ビルドが後で MSVC で壊れます。私が使用するgcc -std=c89と、C++ スタイルのコメントが許可されていないため、すべてが壊れます (他の問題もあるかもしれませんが、これ以上調べていません)。使用するgcc -std=gnu89と、順不同のコード/変数定義が許可されるため、それも役に立ちません。何か案は ?私はちょうどのようなものが必要だと思いますgcc -std=c99 -fno-inline-variable-definitions、そのようなオプションが存在する場合。

0 投票する
1 に答える
970 参照

c - gcc - インライン関数の扱いが異なる 2 つのバージョン

最近、私のプロジェクトで問題が発生しました。通常は gcc-4 でコンパイルしますが、gcc-3 でコンパイルしようとすると、インライン関数の扱いが異なることに気付きました。これを説明するために、簡単な例を作成しました。

main.c:

file.c:

header.h

gcc-3.4.6 でコードをコンパイルすると:

-O2リンカー エラー (f の複数定義) が発生します。フラグを削除しても同じです。コンパイラは、インライン化したくない場合は何もインライン化する必要がないことを知っているので、 と の両方の場合、インライン化する代わりに f をオブジェクト ファイルに配置すると仮定したため、main.c複数file.cの定義エラーが発生しました。明らかに、f静的にすることでこれを修正できます。最悪の場合、fバイナリにいくつかの があります。

しかし、私はこのコードをgcc-4.3.5でコンパイルしようとしました:

fそして、すべてが正常に機能したので、どちらの場合も新しい gcc がインライン化さfれ、バイナリに関数がまったくないと想定しました (gdb でチェックしたところ、私は正しかった)。

ただし、-O2フラグを削除すると、 への未定義の参照が 2 つ取得されましたint f()。そして、ここで、何が起こっているのか本当にわかりません。gcc はfインライン化されると想定していたようで、オブジェクト ファイルに追加しませんでしたが、後で ( がなかったため-O2) インライン化する代わりにこれらの関数の呼び出しを生成することを決定し、そこからリンカー エラーが発生しました。

さまざまなコンパイラでの問題を恐れずにプロジェクト全体で使用できるように、インラインで必要な単純で小さな関数をどのように定義および宣言すればよいでしょうか。そして、それらすべてを静的にするのは正しいことですか? それとも、gcc-4 が壊れていて、静的でない限り、いくつかの翻訳単位でインライン関数の複数の定義を使用するべきではありませんか?

0 投票する
3 に答える
3512 参照

c - C90-C99:構造体の登録

「登録構造体」は合法ですか?標準と(標準から分離された)Gccの観点から?

0 投票する
3 に答える
112088 参照

c - mallocを使用したchar配列の割り当て

次の行を検討します。

sizeof(char)が使用されるのはなぜですか?必要ありませんよね?それともスタイルの問題ですか?

どのような利点がありますか?

0 投票する
15 に答える
943 参照

c - コードの重複を避ける

私が持っているとしましょう:

stmtコードの重複を回避するにはどうすればよいですか?

しかし、回避策はありますか?値としてのgcc拡張ラベルは、このような状況では非常に適切に見えます。

ANSI-Cで同じことができるトリックはありますか?編集:もちろん、私は関数/マクロ/インラインについて考えました。しかし、他に何かありますか?パフォーマンスでもありません。教育目的のためだけに。;)