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

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

2
UNIXドメインソケットVS名前付きパイプ?
UNIXの名前付きソケットを調べたところ、それらは名前付きパイプであると思いました。私は名前パイプを調べましたが、ほとんど違いはありませんでした。私はそれらが異なって初期化されているのを見ましたが、それが私が気づく唯一のものです。どちらもCの書き込み/読み取り機能を使用し、AFAIKと同様に機能します。 UNIXドメインソケットと名前付きパイプの違いは何ですか?いつ他のものを選ぶのですか?デフォルトでどちらを使用する必要がありますか?
122 c  linux 

3
if(0)を使用して、動作するはずのスイッチのケースをスキップしていますか?
C ++のswitchステートメントの2つのケースで、両方とも3番目のケースに分類したいという状況があります。具体的には、2番目のケースは3番目のケースにフォールスルーし、最初のケースも2番目のケースを通過せずに3番目のケースにフォールスルーします。 私はばかげた考えを持っていて、それを試しました、そしてそれはうまくいきました!2番目のケースをif (0) {...で包みました}。次のようになります。 #ifdef __cplusplus # include <cstdio> #else # include <stdio.h> #endif int main(void) { for (int i = 0; i < 3; i++) { printf("%d: ", i); switch (i) { case 0: putchar('a'); // @fallthrough@ if (0) { // fall past all of case 1 (!) …

8
末尾再帰はどの程度正確に機能しますか?
末尾再帰がどのように機能するか、および通常の再帰との違いをほぼ理解しています。私は唯一それが理由を理解していないしないそのリターンアドレスを覚えてスタックを必要としています。 // tail recursion int fac_times (int n, int acc) { if (n == 0) return acc; else return fac_times(n - 1, acc * n); } int factorial (int n) { return fac_times (n, 1); } // normal recursion int factorial (int n) { if (n == 0) return 1; …

13
O(n)時間とO(1)空間での重複の検索
入力:0からn-1までの要素を含むn個の要素の配列が与えられ、これらの数値のいずれかが何度も現れる。 目標:O(n)でこれらの繰り返し数を検索し、一定のメモリ空間のみを使用する。 たとえば、nを7、配列を{1、2、3、1、3、0、6}とすると、答えは1と3になります。同様の質問をここで確認しましたが、回答にはいくつかのデータ構造HashSetなどが使用されています。 同じための効率的なアルゴリズムはありますか?
121 c++  c  algorithm 

23
C / C ++で人々が行う不当な仮定を実証するための教育ツールには何が含まれていますか?
初心者(および中級)プログラマーがC、C ++およびそれらのプラットフォームでの不当な前提を認識して挑戦するのに役立つ、SOのための小さな教育ツールを準備したいと思います。 例: 「整数は回り込む」 「誰もがASCIIを持っている」 「関数ポインタをvoid *に格納できます」 小さなテストプログラムをさまざまなプラットフォームで実行できると考えました。これは、SOでの経験から、多くの未経験/半経験主流の開発者が作成した「もっともらしい」仮定を実行し、さまざまなマシンでそれらが壊れる方法を記録しています。 これの目標は、何かをするのが「安全」であることを証明することではありません(実行することは不可能であり、テストが壊れた場合にのみ何でも証明します)代わりに、最も理解していない個人に最も目立たない表現を示す未定義または実装定義の動作がある場合は、別のマシンで中断します。。 これを達成するために私はあなたに尋ねたいと思います: このアイデアをどのように改善できますか? どのテストが適切で、どのように見えるべきですか? 手に入れて結果を投稿できるプラットフォームでテストを実行して、プラットフォームのデータベースを作成します。どのように違い、なぜこの違いが許容されるのでしょうか。 テストおもちゃの現在のバージョンは次のとおりです。 #include <stdio.h> #include <limits.h> #include <stdlib.h> #include <stddef.h> int count=0; int total=0; void expect(const char *info, const char *expr) { printf("..%s\n but '%s' is false.\n",info,expr); fflush(stdout); count++; } #define EXPECT(INFO,EXPR) if (total++,!(EXPR)) expect(INFO,#EXPR) /* stack check..How …


21
nullポインタにアドレス0が使用されるのはなぜですか?
C(またはそのことについてはC ++)では、値がゼロの場合、ポインターは特別です。メモリーを解放した後、ポインターをゼロに設定することをお勧めします。mallocを呼び出すと、メモリを取得できない場合は値0のポインタが返されます。私はif (p != 0)常に、渡されたポインタが有効であることなどを確認するために使用しています。 しかし、メモリアドレス指定は0から始まるので、0は他のアドレスと同じように有効なアドレスではありませんか?その場合、nullポインターの処理に0をどのように使用できますか?代わりに負の数がnullにならないのはなぜですか? 編集: 良い答えがたくさん。私の心がそれを解釈しているように表現された答えで言われたことを要約し、私が誤解した場合、コミュニティが私を修正してくれることを願っています。 プログラミングの他のすべてのように、それは抽象化です。単なる定数であり、実際にはアドレス0に関連していません。C++ 0xは、キーワードを追加することでこれを強調していnullptrます。 これはアドレスの抽象化でもありません。C標準で指定されている定数であり、コンパイラが「実際の」アドレスと決して等しくないことを確認する限り、他の数値に変換できます。0がプラットフォームに使用するのに最適な値。 初期の場合のように抽象化されていない場合、アドレス0はシステムによって使用され、プログラマーの立ち入りを制限します。 私の負の数の提案は少しワイルドなブレーンストーミングだったと私は認めます。アドレスに符号付き整数を使用することは、ヌルポインター(-1など)を除いて、値空間が有効なアドレスを作る正の整数と無駄になる負の数に均等に分割されることを意味する場合、少し無駄です。 いずれかの数値が常にデータ型で表現できる場合、それは0です(おそらく1もそうです。符号なしの場合は0または1になる1ビット整数、または符号付きの場合は単に符号付きビット、または[-2、1]になります。ただし、0がnullで、1がメモリ内の唯一のアクセス可能なバイトであることを確認できます。) それでも未だに未解決な部分があります。スタックオーバーフローの質問特定の固定アドレスへのポインターは、nullポインターの0が抽象化であっても、他のポインター値は必ずしもそうではないことを示しています。これにより、別のスタックオーバーフローの質問を投稿するようになりました。アドレス0にアクセスできますか?。
121 c++  c  memory  pointers 

6
ソケットconnect()とbind()
connect()とbind()システムコールの両方が、ソケットファイル記述子をアドレス(通常はip / portの組み合わせ)に「関連付け」ます。彼らのプロトタイプは次のようなものです- int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); そして int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 2つの呼び出しの正確な違いは何ですか?とき1を使うべきconnect()ときとbind()? 具体的には、一部のサンプルサーバークライアントコードで、クライアントが使用してconnect()おり、サーバーがbind()呼び出しを使用していることがわかりました。理由は完全にはわかりませんでした。

3
C / C ++マクロ文字列連結
#define STR1 "s" #define STR2 "1" #define STR3 STR1 ## STR2 STR3 == "s1"を連結することは可能ですか?これを行うには、argsを別のマクロ関数に渡します。しかし、直接的な方法はありますか?
121 c++  c  c-preprocessor 

5
C ++ 11がC99として指定された初期化リストをサポートしないのはなぜですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 2年前休業。 この質問を改善する 考慮してください: struct Person { int height; int weight; int age; }; int main() { Person p { .age = 18 }; } 上記のコードはC99では合法ですが、C ++ 11では合法ではありません。 何でしたか c ++ 11 そのような便利な機能のサポートを除外するための標準委員会の理論的根拠?
121 c++  c  c++11  initialization  c99 


2
データ構造が「侵入的」であるとはどういう意味ですか?
リストやスタックなどのデータ構造を説明するために侵入型という用語を使用したことがありますが、それはどういう意味ですか? 侵入型データ構造のコード例を教えてください。侵入型データ構造との違いはありますか? また、なぜそれを邪魔にならない(または邪魔にならない)のですか?メリットは何ですか?欠点は何ですか?

6
.bssセグメントが必要なのはなぜですか?
私が知っているのは、グローバル変数と静的変数が.dataセグメントに格納され、初期化されていないデータが.bssセグメントにあることです。私が理解していないのは、初期化されていない変数専用のセグメントがあるのはなぜですか?初期化されていない変数に実行時に値が割り当てられている場合、変数はまだ.bssセグメントにのみ存在しますか? 次のプログラムで aは、.dataセグメントb内にあり、.bssセグメント内にあります。あれは正しいですか?私の理解が間違っている場合は親切に私を修正します。 #include <stdio.h> #include <stdlib.h> int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9}; int b[20]; /* Uninitialized, so in the .bss and will not occupy space for 20 * sizeof (int) */ int main () { ; } また、次のプログラムを検討してください、 #include <stdio.h> #include <stdlib.h> …

7
intとfloorにキャストする
これらの間に違いはありますか? float foo1 = (int)(bar / 3.0); float foo2 = floor(bar / 3.0); 私が理解しているように、どちらの場合も同じ結果になります。コンパイルされたコードに違いはありますか?
120 c++  c  floating-point 

13
CまたはC ++でのコールスタックの出力
特定の関数が呼び出されるたびに、CまたはC ++で実行中のプロセスのコールスタックをダンプする方法はありますか?私が考えているのは次のようなものです: void foo() { print_stack_trace(); // foo's body return } where はPerl print_stack_traceと同様に機能callerします。 またはこのようなもの: int main (void) { // will print out debug info every time foo() is called register_stack_trace_function(foo); // etc... } where は、呼び出さregister_stack_trace_functionれたときにスタックトレースが出力されるようにする内部ブレークポイントを配置しますfoo。 このようなものはいくつかの標準Cライブラリに存在しますか? LinuxでGCCを使用しています。 バックグラウンド この動作に影響しないはずのコマンドラインスイッチに基づいて異なる動作をするテスト実行があります。私のコードには、これらのスイッチに基づいて異なる方法で呼び出されていると想定する疑似乱数ジェネレーターがあります。スイッチの各セットを使用してテストを実行し、乱数ジェネレーターの呼び出しがスイッチごとに異なるかどうかを確認したいのですが。
120 c++  c  linux  callstack 

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