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

Cは、システムプログラミング(OSおよび組み込み)、ライブラリ、ゲーム、クロスプラットフォームに使用される汎用プログラミング言語です。このタグは、ISO 9899標準で定義されているC言語に関する一般的な質問で使用する必要があります(特に指定のない限り、最新バージョン9899:2018。バージョン固有のリクエストには、c89、c99、c11などのタグも付けます)。CはC ++とは異なり、合理的な理由がない限り、C ++タグと組み合わせるべきではありません。

5
なぜ符号なし整数オーバーフローは動作が定義されていますが、符号付き整数オーバーフローは定義されていないのですか?
符号なし整数オーバーフローは、CおよびC ++標準の両方で明確に定義されています。たとえば、C99標準(§6.2.5/9)は 結果の符号なし整数型で表すことができない結果は、結果の型で表すことができる最大値よりも1大きい数を法として減じられるため、符号なしオペランドを伴う計算は決してオーバーフローできません。 ただし、どちらの規格も、符号付き整数オーバーフローは未定義の動作であると述べています。ここでも、C99標準(§3.4.3/1)から 未定義の動作の例は、整数オーバーフローでの動作です この矛盾の歴史的または(さらに良い!)技術的な理由はありますか?

9
構造のパディングとパッキング
考慮してください: struct mystruct_A { char a; int b; char c; } x; struct mystruct_B { int b; char a; } y; 構造のサイズはそれぞれ12と8です。 これらの構造物はパディングまたはパックされていますか? パディングまたはパッキングはいつ行われますか?
209 c  struct  structure  padding  packing 


15
Cプログラムの実行時間
複数のプロセッサーで並列実行することを目的としたCプログラムがあります。実行時間を記録できるようにする必要があります(1秒から数分の場合もあります)。私は答えを探しましたが、それらはすべて、clock()関数の使用を提案しているようです。この関数は、プログラムが取ったクロック数をClocks_per_second値で割って計算します。 Clocks_per_second値の計算方法がわかりません。 Javaでは、実行の前後に現在の時間をミリ秒単位で取得します。 Cにも同様のものはありますか?私は見ましたが、2番目の解像度よりも優れたものを得る方法を見つけることができないようです。 プロファイラーがオプションになることも知っていますが、タイマーを自分で実装することを検討しています。 ありがとう
209 c  benchmarking 

30
なぜCはそんなに速いのか、なぜ他の言語はそれほど速くも速くもないのですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4ヶ月前に閉鎖。 この質問を改善する StackOverflowポッドキャストを聞いていると、ジャブは「本物のプログラマ」がCで書いていることを思い起こし、Cは「マシンに近い」ため、はるかに高速です。以前のアサーションを別の投稿に残して、Cが他の言語よりも高速になることを可能にする特別な点は何ですか?または別の言い方をすると:他の言語がCと同じくらい高速に実行されるバイナリにコンパイルできないようにする方法は何ですか?
208 c  performance 


8
有効ですが、スイッチケースの価値のない構文?
少しタイプミスをして、私は誤ってこの構成を見つけました: int main(void) { char foo = 'c'; switch(foo) { printf("Cant Touch This\n"); // This line is Unreachable case 'a': printf("A\n"); break; case 'b': printf("B\n"); break; case 'c': printf("C\n"); break; case 'd': printf("D\n"); break; } return 0; } と思われるprintfの一番上のswitch文が有効でなく、完全に到達不能です。 到達できないコードについての警告さえないまま、クリーンなコンパイルを取得しましたが、これは無意味なようです。 コンパイラはこれに到達できないコードとしてフラグを立てるべきですか? これは何か目的を果たしますか?

25
メモリアドレスでない場合、Cポインタとは正確には何ですか?
Cに関する評判の良い情報源では、&演算子について説明した後で、次の情報が提供されています。 ... [アドレス]という用語が残っているのは少し残念です。アドレスが何であるかを知らない人を混乱させ、誤解させます。ポインタをアドレスのように考えることは、通常、悲しみにつながります。 。 私が読んだ他の資料(同じように評判の良い情報源からのものだと思います)は、常にポインタと&演算子をメモリアドレスを与えるものとして言及していました。私は問題の現実を探り続けたいと思いますが、信頼できる情報源が同意しない場合、それは一種の困難です。 さて、少し混乱しています。正確に言えば、ポインタとは、メモリアドレスではないのでしょうか。 PS 作者は後にこう述べています...私は別のものを発明するので、しかし長期的「のアドレス」を使用していきます [用語]はさらに悪化するだろう。



17
Cでの参照渡し
Cが参照による変数の受け渡しをサポートしない場合、なぜこれが機能するのですか? #include <stdio.h> void f(int *j) { (*j)++; } int main() { int i = 20; int *p = &i; f(p); printf("i = %d\n", i); return 0; } 出力: $ gcc -std=c99 test.c $ a.exe i = 21



25
ループと関数をサポートする言語で「goto」を使用することの利点はありますか?もしそうなら、なぜですか?
私は長い間goto、可能であれば使用すべきではないという印象を受けてきました。先日、libavcodec(Cで書かれています)を調べていると、複数の使い方があることに気付きました。gotoループと関数をサポートする言語で使用することが有利になることはありますか?もしそうなら、なぜですか?


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.