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

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

1
「char s [static 10]」のような関数の配列パラメーターの静的キーワードの目的は何ですか?
いくつかのソースコードを閲覧しているときに、次のような関数を見つけました。 void someFunction(char someArray[static 100]) { // do something cool here } いくつかの実験で、他の修飾子もそこに現れるかもしれません: void someFunction(char someArray[const]) { // do something cool here } 修飾子は[ ]、配列が関数のパラメーターとして宣言されている場合にのみ許可されているようです。これらは何をしますか?関数パラメーターの場合はなぜ違うのですか?
144 c  arrays  parameters  static 

6
if elseステートメントにおけるGCCの__builtin_expectの利点は何ですか?
#define彼らが使用しているに出会いました__builtin_expect。 ドキュメントは言う: 組み込み関数: long __builtin_expect (long exp, long c) __builtin_expectコンパイラーに分岐予測情報を提供するために使用できます。-fprofile-arcsプログラマーはプログラムが実際にどのように機能するかを予測することで悪名高いため、一般に、これには実際のプロファイルフィードバックを使用することをお勧めします()。ただし、このデータを収集するのが難しいアプリケーションがあります。 戻り値はの値でexpあり、整数式でなければなりません。組み込みのセマンティクスは、それが期待されていること exp == cです。例えば: if (__builtin_expect (x, 0)) foo (); ゼロになることfooを期待xしているため、を呼び出すことを期待していないことを示します。 だから直接使用しないのはなぜですか: if (x) foo (); 複雑な構文の代わりに__builtin_expect?
144 c  linux  gcc  built-in 

6
変数名内にコメントを書くことはできますか?
int main() { i/*nt*/a = 10; return 0; } 上記のコードがあり、トークンをカウントしたい場合、14トークンまたは13トークンになりますか? 変数名の中にコメントを書くことは有効ですか?あなたは、と仮定することができint i、int a、int iaグローバルに定義されています。


9
sigactionとsignalの違いは何ですか?
ここにあるアプリに追加のシグナルハンドラーを追加しようとしていましたが、作成者がsigaction()他のシグナルハンドラーの設定に使用していたことに気付きました。使うつもりsignal()でした。慣習に従うために使用する必要がありますsigaction()が、ゼロから作成する場合、どちらを選択する必要がありますか?
143 c  signals  posix 

2
コンパイル時の-pthreadフラグの重要性
さまざまなマルチスレッドのCおよびC ++プロジェクトで-pthread、コンパイルステージとリンクステージの両方にフラグが適用されるのを見ましたが、他の人はまったく使用せず-lpthread、リンクステージに渡しています。 -pthreadフラグを使用してコンパイルおよびリンクしないという危険はあり-pthreadますか?つまり、実際には何をしますか?私は主にLinuxプラットフォームに興味があります。
143 c++  c  linux  pthreads 

16
ポインターの明確化
私はこのチュートリアルに従って、ポインターへのポインターがどのように機能するかについて説明しました。 関連する一節を引用させてください: int i = 5, j = 6, k = 7; int *ip1 = &i, *ip2 = &j; これで設定できます int **ipp = &ip1; and ippはip1を指していiます。*ippis ip1、and、**ippis i、または5です。次のようなおなじみのボックスと矢印の表記法で状況を説明できます。 もしそうなら *ipp = ip2; ipp(ip1)が指すポインターを変更して、のコピーが含まれるip2ようにしip1ましたj。 私の質問は:なぜ第二画像に、されてippまだを指してip1ではなくip2?
142 c  pointers 

6
_DEBUGとNDEBUG
コードのデバッグセクションを指定するには、どのプリプロセッサ定義を使用する必要がありますか? 使用する#ifdef _DEBUGか#ifndef NDEBUG、それを行うためのより良い方法があり#define MY_DEBUGますか? _DEBUGVisual Studio固有と思いますが、NDEBUGは標準ですか?
142 c++  c  debugging 


4
BLAS、LAPACK、ATLASの関係は?
BLAS、LAPACK、ATLASがどのように関連しているか、またそれらをどのように一緒に使用する必要があるのか​​理解できません!私は彼らのすべてのマニュアルを調べてきましたが、BLASとLAPACKの概要と、見つけた非常に少数の例でそれらを使用する方法がありますが、ATLASを使用して実際の例を見つけることはできません。この二つ。 私はマトリックスで低レベルの作業を行おうとしていますが、私の主要言語はCです。最初にGSLを使用したかったのですが、最高のパフォーマンスが必要な場合はBLASとATLASを使用する必要があると書かれています。これらをすべて(Cで)一緒に使用する方法の良い例を示す良いWebページはありますか?言い換えれば、これら3つ(またはそれらのサブセット!)の使用に関するチュートリアルを探しています。要するに私は混乱しています!
142 c  lapack  blas  atlas 

30
Cの隠し機能
ロックされています。質問はトピックから外れていますが、歴史的に重要であるため、この質問とその回答はロックされています。現在、新しい回答や相互作用を受け入れていません。 私はすべてのCコンパイラの実装の背後に標準があることを知っているので、隠れた機能があってはなりません。それにもかかわらず、私はすべてのC開発者がいつも使用する隠し/秘密のトリックを持っていると確信しています。
141 c  hidden-features 

21
Objective-Cのtypedefを同等の文字列に変換する
.hファイルでtypedefが宣言されていると仮定します。 typedef enum { JSON, XML, Atom, RSS } FormatType; typedefの数値を文字列に変換する関数を作成したいと思います。たとえば、メッセージ[self toString:JSON]が送信された場合。「JSON」を返します。 関数は次のようになります。 -(NSString *) toString:(FormatType)formatType { //need help here return []; } ちなみに、この構文を試してみると [self toString:FormatType.JSON]; typedef値をメソッドに渡すと、エラーが発生します。何が欠けていますか?
141 c  objective-c  enums  typedef 

16
if-elseブロックの「if(0)」ブロックの目的は何ですか?
私の質問は、件名で言及した行についてであり、製品コード内の多くの場所で見ることができます。 全体的なコードは次のようになります。 if (0) { // Empty braces } else if (some_fn_call()) { // actual code } else if (some_other_fn_call()) { // another actual code ... } else { // default case } 他のブランチは私の質問には関係ありません。if (0)ここに置くことの意味は何だろう。中括弧は空なので、コードのブロックにコメントを付けることは想定されていません。コンパイラーに何らかの最適化を強制するのでしょうか、それともその意図は異なりますか? 私はこの明示的なケースをSOとインターネットで検索しようとしましたが、成功しませんでした。JavaScriptには同様の質問がありますが、Cにはありません。別の質問があります。`if`条件でゼロが割り当てられるとどうなりますか?、しかしそれは変数へのゼロ代入について議論しており、 'if(0)'の使用法自体については触れていません。
141 c  if-statement 

23
初心者にCポインター(宣言と単項演算子)を説明する方法は?
私は最近、Cプログラミングの初心者へのポインタを説明することができて、次の困難に遭遇しました。ポインタの使用方法をすでに知っている場合は、まったく問題に見えないかもしれませんが、次の例を明確に考えてみてください。 int foo = 1; int *bar = &foo; printf("%p\n", (void *)&foo); printf("%i\n", *bar); まったくの初心者にとって、出力は意外かもしれません。2行目では、* barを&fooと宣言したばかりですが、4行目では、* barは実際には&fooではなくfooであることがわかります。 混乱は、*シンボルのあいまいさから生じていると言えるかもしれません。2行目では、ポインターの宣言に使用されています。4行目では、ポインターが指す値をフェッチする単項演算子として使用されています。二つの違うことですよね? ただし、この「説明」は初心者にはまったく役立ちません。微妙な食い違いを指摘することで、新しいコンセプトを紹介しています。これはそれを教えるための正しい方法ではありません。 それで、カーニハンとリッチーはそれをどのように説明しましたか? 単項演算子*は間接演算子または逆参照演算子です。ポインターに適用されると、ポインターが指すオブジェクトにアクセスします。[…] ポインターipの宣言は、int *ipニーモニックとして意図されています。それは式*ipがint であると言います。変数の宣言の構文は、変数が出現する可能性のある式の構文を模倣しています。 int *ip「*ipが返されますint」のように読む必要がありますか?しかし、なぜ宣言後の割り当てがそのパターンに従っていないのですか?初心者が変数を初期化したい場合はどうなりますか?int *ip = 1(読み:*ip返されるintとintある1)期待通りに動作しません。概念モデルは首尾一貫していないようです。ここで何か不足していますか? 編集:それはここで答えを要約しようとしました。
141 c  pointers 

8
if-return-returnまたはif-else-return?を使用する方が効率的ですか?
とのifステートメントがあるとしreturnます。効率の観点から、私は使用する必要があります if(A > B): return A+1 return A-1 または if(A > B): return A+1 else: return A-1 コンパイルされた言語(C)またはスクリプト化された言語(Python)を使用するとき、どちらを好むべきですか?

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