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

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


12
関数ポインタ、クロージャ、ラムダ
私はちょうど今関数ポインタについて学んでいて、この主題に関するK&Rの章を読んでいたとき、最初に私を襲ったのは「ねえ、これはちょっと閉鎖のようなものだ」でした。私はこの仮定がどういうわけか根本的に間違っていることを知っていました、そしてオンラインで検索した後、私はこの比較の分析を実際には見つけませんでした。 では、なぜCスタイルの関数ポインターがクロージャーやラムダと根本的に異なるのでしょうか。私が知る限り、それは、関数を匿名で定義する慣行とは対照的に、関数ポインターがまだ定義された(名前付き)関数を指しているという事実と関係があります。 関数を関数に渡すことは、名前が付けられていない2番目のケースでは、渡される通常の日常の関数である最初のケースよりも強力であると見なされるのはなぜですか? 2つを非常に密接に比較するのが間違っている方法と理由を教えてください。 ありがとう。

3
プラットフォームに依存しないsize_tcのフォーマット指定子?
size_tCで型の変数を出力したいのですが、size_tアーキテクチャーごとに異なる変数型にエイリアスされているようです。たとえば、あるマシン(64ビット)では、次のコードは警告をスローしません。 size_t size = 1; printf("the size is %ld", size); しかし、他のマシン(32ビット)では、上記のコードは次の警告メッセージを生成します。 警告:フォーマット '%ld'はタイプ 'long int *'を予期していますが、引数3のタイプは 'size_t *'です。 これはポインタサイズの違いによるものと思われるため、64ビットマシンでsize_tはlong int("%ld")にエイリアスされますが、32ビットマシンでsize_tは別のタイプにエイリアスされます。 専用のフォーマット指定子はありsize_tますか?



6
具体的には、mallocの結果をキャストすることの危険性は何ですか?
人々がこれを重複とマークし始める前に、私は以下のすべてを読みましたが、どれも私が探している答えを提供していません: C FAQ:mallocの戻り値をキャストすることの何が問題になっていますか? SO:malloc()の戻り値を明示的にキャストする必要がありますか? SO:Cでの不要なポインターキャスト SO:mallocの結果をキャストしますか? C FAQと上記の質問に対する多くの回答の両方が、キャストmallocの戻り値が隠すことができるという不思議なエラーを引用しています。ただし、実際にはそのようなエラーの具体例を示すものはありません。今、私がエラーを言ったことに注意してください、ではなく警告。 ここで、次のコードが与えられます。 #include <string.h> #include <stdio.h> // #include <stdlib.h> int main(int argc, char** argv) { char * p = /*(char*)*/malloc(10); strcpy(p, "hello"); printf("%s\n", p); return 0; } 上記のコードをgcc4.2でコンパイルすると、キャストがある場合とない場合で同じ警告が表示され、プログラムは正しく実行され、どちらの場合も同じ結果が得られます。 anon@anon:~/$ gcc -Wextra nostdlib_malloc.c -o nostdlib_malloc nostdlib_malloc.c: In function ‘main’: nostdlib_malloc.c:7: warning: incompatible implicit declaration …
86 c 

7
シグナルハンドラでprintfを使用しないようにするにはどうすればよいですか?
printfは再入可能ではないため、シグナルハンドラーで使用しても安全ではないはずです。しかし、私はprintfこの方法を使用する多くのサンプルコードを見てきました。 だから私の質問は:printfシグナルハンドラーでの使用を避ける必要があるのはいつですか、そして推奨される代替品はありますか?
86 c  linux  signals 

30
なぜアセンブリでプログラムするのですか?[閉まっている]
クローズ。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 昨年休業。 この質問を改善する そこにいるすべてのハードコアな低レベルのハッカーに質問があります。私はブログでこの文に出くわしました。それは一般的な声明のように思われるので、私はソースが重要であるとは本当に思いません(あなたが本当に気にかけているならそれはHaackです)。 たとえば、最近の多くの3Dゲームには、C ++とアセンブリで記述された高性能コアエンジンがあります。 アセンブリに関する限り、コンパイラが余分な命令を発行したり、過剰なバイトを使用したりしたくないため、またはCで表現できない(またはなしで表現できない)より優れたアルゴリズムを使用しているため、アセンブリで記述されたコードです。コンパイラはそれらを混乱させます)? 低レベルのものを理解することが重要だと完全に理解しています。あなたがそれを理解した後、私はアセンブリのなぜプログラムを理解したいだけです。

7
C標準は真理値を0または1として明示的に示していますか?
等しくない数はCのように0表示されることがわかっているtrueので、次のように書くことができます。 int a = 16; while (a--) printf("%d\n", a); // prints numbers from 15 to 0 しかし、true / falseがCで1/として定義されているかどうか疑問に思っていた0ので、以下のコードを試しました。 printf("True = %d, False = %d\n", (0 == 0), (0 != 0)); // prints: True = 1, False = 0 DOES C標準は、明示的真理として真と偽の値を示している1と0、それぞれの?
86 c 


16
負の数を処理するC / C ++ / Obj-Cでモジュロ(%)演算子をコーディングする方法
(数学者としての)C派生言語に対する私のペットの嫌いなものの1つはそれです (-1) % 8 // comes out as -1, and not 7 fmodf(-1,8) // fails similarly What's the best solution? C++ allows the possibility of templates and operator overloading, but both of these are murky waters for me. examples gratefully received.


15
単項プラス演算子は何をしますか?
単項プラス演算子は何をしますか?私が見つけたいくつかの定義がありますが(こことここ)、それが何に使用されるのかまだわかりません。何もしないようですが、理由がありますよね?
86 c#  c++  c  unary-operator 

5
Cでは、長いprintfステートメントを複数の行に分割できますか?
私は次のステートメントを持っています: printf("name: %s\targs: %s\tvalue %d\tarraysize %d\n", sp->name, sp->args, sp->value, sp->arraysize); 解散したいです。以下を試しましたが、うまくいきません。 printf("name: %s\t args: %s\t value %d\t arraysize %d\n", sp->name, sp->args, sp->value, sp->arraysize); どうすれば分割できますか?
86 c  printf 

29
「do…while」と「while」
重複の可能性: Whileと DoWhileいつwhileループの代わりにdo-whileを使用する必要がありますか? 私はしばらくプログラミングをしていて(2年間の仕事+ 4。5年の学位+ 1年間の大学入学前)、プログラミング入門コースで強制される以外にdo-whileループを使用したことはありません。こんなに根本的なことに出くわしたことがなければ、プログラミングが間違っていると感じるようになります。 正しい状況に遭遇しなかったということでしょうか? しばらくではなくdo-whileを使用する必要があるいくつかの例は何ですか? (私の学校教育はほとんどすべてC / C ++で行われ、私の仕事はC#で行われているため、do-whileの動作が異なるため、絶対に意味のある別の言語がある場合、これらの質問は実際には当てはまりません。) 明確にするために...私はawhileとaの違いを知っていdo-whileます。終了条件をチェックしてからタスクを実行します。do-whileタスクを実行してから、終了条件を確認します。
86 c#  c++  c  while-loop  do-while 

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