タグ付けされた質問 「c89」


8
Cでの変数宣言の配置
Cでは、すべての変数を関数の先頭で宣言する必要があるとずっと思っていました。C99でのルールはC ++と同じであることは知っていますが、C89 / ANSI Cの変数宣言の配置ルールは何ですか? 次のコードはgcc -std=c89andで正常にコンパイルされますgcc -ansi。 #include <stdio.h> int main() { int i; for (i = 0; i < 10; i++) { char c = (i % 95) + 32; printf("%i: %c\n", i, c); char *s; s = "some string"; puts(s); } return 0; } の宣言cとsC89 / ANSIモードでのエラーの原因になるべきではありませんか?
129 c  declaration  c89 

3
以下のプログラムは、C89モードでコンパイルしたときに「C89」を出力し、C99モードでコンパイルしたときに「C99」をどのように出力しますか?
私はこのCプログラムをウェブから見つけました: #include <stdio.h> int main(){ printf("C%d\n",(int)(90-(-4.5//**/ -4.5))); return 0; } このプログラムの興味深い点は、C89モードでC89コンパイルおよび実行すると印刷され、C99モードでコンパイルおよび実行すると印刷されることC99です。しかし、私はこのプログラムがどのように機能するかを理解することができません。 printf上記のプログラムで2番目の引数がどのように機能するかを説明できますか?
128 c  printf  comments  c99  c89 

5
C、C99、ANSI C、GNU Cの違いは何ですか?
私はcodechefでプログラミングの練習を始めましたが、CとC99の違いに混乱しています。ここでCはどういう意味ですか?C89ですか?この送信の下部にある言語を確認してください。CとC99の両方が含まれています。 私はインターネット上でGNU Cと呼ばれるものを見つけました。linux/ unixシステム用の別のCはありますか?これらはANSIのC標準に準拠していますか?いくつかの場所で「C99 strict」も読んだことがあります。これは何ですか? 使用中の他のCの標準はありますか?C 4.3.2と呼ばれるものはありますか、それとも現在使用中のgccバージョンですか? 編集: これ、これ、これが役に立ちました。さらに検索して、未回答の項目を編集します。 私はプログラミングの初心者ではありません。C言語とは何か知っています。C89、C99、C11のようなANSIによる異なるC標準があることを知っています。
122 c  gcc  c99  c89  ansi-c 

8
「struct hack」は技術的に未定義の動作ですか?
私が尋ねているのは、よく知られている「構造体の最後のメンバーは可変長です」というトリックです。それはこのようなものになります: struct T { int len; char s[1]; }; struct T *p = malloc(sizeof(struct T) + 100); p->len = 100; strcpy(p->s, "hello world"); 構造体がメモリに配置される方法により、必要なブロックよりも大きい構造体に構造体をオーバーレイし、最後のメンバーを1 char指定されたものよりも大きいかのように扱うことができます。 だから問題は:この技術は技術的に未定義の動作ですか?。私はそれがそうであると期待しますが、標準がこれについて何を言っているのか興味がありました。 PS:私はこれに対するC99のアプローチを知っています。具体的には、上記のトリックのバージョンに忠実に答えてほしいと思います。

3
PDF形式のC89 / C90標準はどこにありますか?
C89 / C90規格の無料コピー版を探していますが、どこにも見つかりません。なぜそれを見つけるのがとても難しいのですか? C99およびC11標準は、インターネットでコピーを入手するのが非常に簡単です。StackOverflowの質問でも現在のCまたはC ++標準ドキュメントはどこにありますか?そしてC標準は、標準を取得することは、私が探しているものを含んでいません。 Web検索も役に立ちませんでしたし、オープンスタンダードも役に立ちませんでした。
90 c  ansi  c89 

10
strcpyの代わりにstrncpyを使用する必要があるのはなぜですか?
編集:例のソースを追加しました。 私はこの例に出くわしました: char source[MAX] = "123456789"; char source1[MAX] = "123456789"; char destination[MAX] = "abcdefg"; char destination1[MAX] = "abcdefg"; char *return_string; int index = 5; /* This is how strcpy works */ printf("destination is originally = '%s'\n", destination); return_string = strcpy(destination, source); printf("after strcpy, dest becomes '%s'\n\n", destination); /* This is …

30
組み込み開発にC ++の代わりにCを使用する理由はありますか?
質問 ハードウェアC ++とC89に2つのコンパイラがあります クラスでC ++を使用することを考えていますが、ポリモーフィズムはありません(vtableを回避するため)。C ++を使用したい主な理由は次のとおりです。 マクロ定義の代わりに「インライン」関数を使用することを好みます。 プレフィックスがコードを乱雑にするので、名前空間を使用したいと思います。 C ++は、主にテンプレートと冗長なキャストのために、少しタイプが安全だと思います。 私はオーバーロードされた関数とコンストラクター(自動キャストに使用される)が本当に好きです。 非常に限られたハードウェア(4kbのRAM)向けに開発する場合、C89を使い続ける理由はありますか? 結論 あなたの答えをありがとう、彼らは本当に役に立ちました! 私は主題を熟考しました、そして私は主に以下のためにCに固執します: Cで実際のコードを予測する方が簡単です。これは、RAMが4kbしかない場合に非常に重要です。 私のチームは主にC開発者で構成されているため、高度なC ++機能はあまり使用されません。 Cコンパイラ(C89)で関数をインライン化する方法を見つけました。 あなたがたくさんの良い答えを提供したので、1つの答えを受け入れるのは難しいです。残念ながら、ウィキを作成して受け入れることができないので、私が最も考えさせられた答えを1つ選びます。
82 c++  c  embedded  c89 

4
この関数が文字列の正しい長さを返すのはなぜですか?(charポインタのインクリメント)
これは文字列の文字数を数える関数です: int str_len(const char* s) { int i = 0; while(*(s++)) { i++; } return i; } なぜこれは正しい長さを返すのですか? この関数を単純なStringで呼び出すとしましょう"a"。次にs、whileループでインクリメントされるため、sおよびの値iは両方とも0です。
12 c  while-loop  strlen  c89 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.