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

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

8
関数をインライン化しないようにgccに指示するにはどうすればよいですか?
ソースファイルにこの小さな関数があるとしましょう static void foo() {} そして、私は自分のバイナリの最適化されたバージョンを構築していますが、この関数をインライン化したくありません(最適化のため)。インライン化を防ぐためにソースコードに追加できるマクロはありますか?
126 c  gcc  inline 

7
C動的に成長する配列
ゲーム内のエンティティの「生の」リストを読み取るプログラムがあり、さまざまなものを処理するために、エンティティの数が不定のインデックス番号(int)を保持する配列を作成するつもりです。そのようなインデックスを維持するためにメモリやCPUを使いすぎないようにしたい... 私がこれまでに使用した迅速で汚い解決策は、メインの処理関数(ローカルフォーカス)で、最大ゲームエンティティのサイズの配列と、リストに追加された数を追跡する別の整数を宣言することです。すべてのリストが3000個以上の配列を保持しているため、これは満足のいくものではありませんが、それは無駄ではありませんが、さまざまな関数に6〜7個のリストのソリューションを使用できるので無駄です。 これを実現するためのC(C ++またはC#ではない)固有のソリューションは見つかりませんでした。ポインターを使用することはできますが、ポインターを使用するのは少し怖いです(唯一の可能な方法でない限り)。 配列が変更された場合、配列はローカル関数のスコープを離れません(関数に渡され、その後破棄されます)。 ポインターが唯一の解決策である場合、リークを回避するためにポインターを追跡するにはどうすればよいですか?
126 c  dynamic-arrays 

12
C ++プログラムでscanf()を使用すると、cinを使用するよりも高速ですか?
これが本当かどうかはわかりませんが、問題を提供しているサイトの1つに関するFAQを読んでいたときに、何かに気づきました。 入出力メソッドを確認してください。C ++では、cinおよびcoutの使用は遅すぎます。これらを使用すると、適切な量の入力または出力で問題を解決できないことが保証されます。代わりにprintfとscanfを使用してください。 誰かがこれを明確にしてもらえますか?C ++プログラムで実際にscanf()を使用するのは、cin >>を使用するよりも速いですか?はいの場合、それをC ++プログラムで使用するのは良い習慣ですか?私はC ++を学習しているだけですが、C固有のものだと思いました...
126 c++  c  performance  io 

8
scanfの代わりに何を入力変換に使用できますか?
他の人に使用を思いとどまらせscanfたり、より良い代替案があると言ったりする人がよくいます。ただし、結局、「使用しないscanf」または「正しい形式の文字列はここにある」のいずれかであり、言及されている「より良い代替手段」の例はありません。 たとえば、次のコードスニペットを見てみましょう。 scanf("%c", &c); これは、最後の変換後に入力ストリームに残った空白を読み取ります。これに対する通常の提案された解決策は、使用することです: scanf(" %c", &c); または使用しませんscanf。 のでscanf悪い、入力フォーマット変換のためのいくつかのANSI Cオプション何scanf使用せずに(例えば、整数、浮動小数点、文字列など)を通常扱うことができるのscanf?
125 c  scanf 

29
(アンマネージ)コードのメモリリークをどのように検出/回避しますか?[閉まっている]
現在のところ、この質問は、Q&A形式には適していません。事実、参考文献、専門知識によって回答が裏付けられることを期待していますが、この質問は、討論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問が改善され、場合によっては再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 アンマネージC / C ++コードで、メモリリークを検出するためのベストプラクティスは何ですか?そして避けるべきコーディングガイドラインは?(それがそのように単純であるかのように;) 私たちは過去に少しばかげた方法を使用しました:メモリ割り当ての呼び出しごとにカウンターをインクリメントし、解放中にデクリメントすることです。プログラムの最後では、カウンター値はゼロでなければなりません。 これは良い方法ではなく、いくつかの問題点があります。(たとえば、プラットフォームAPI呼び出しによって割り当てられたメモリを解放する場合、割り当て数は解放数と正確には一致しません。もちろん、割り当てられたメモリを呼び出すAPI呼び出しを呼び出すと、カウンターが増加します。) 私はあなたの経験、提案、そしておそらくこれを簡単にするツールへのいくつかの参照を期待しています。
125 c++  c  memory-leaks 

7
なぜauto a = 1; Cでコンパイルしますか?
コード: int main(void) { auto a=1; return 0; } ファイルに.c拡張子が付いている場合、MS Visual Studio 2012コンパイラによってエラーなしでコンパイルされます。私は、.c拡張子を使用する場合、コンパイルはC ++ではなくC構文に従う必要があると常に考えていました。さらに、私が知る限り、型なしのautoは、C ++ 11以降のC ++でのみ許可されています。これは、型が初期化子から推定されることを意味します。 それは私のコンパイラがCに固執していないことを意味しますか、それともコードは実際にはC言語で正しいのですか?
125 c  auto  c11 




7
stdlibとCのカラー出力
カラー出力が必要なシンプルなアプリケーションを作成しています。出力をemacsやbashのように色付けするにはどうすればよいですか? 私のアプリケーションはUNIXシステム専用であるため、Windowsは気にしません。
125 c  colors  std  stdio 

4
Cでの_start()の使用法は何ですか?
同僚から、main()関数を書かなくてもCプログラムを書いて実行できることがわかりました。これは次のように行うことができます: my_main.c /* Compile this with gcc -nostartfiles */ #include <stdlib.h> void _start() { int ret = my_main(); exit(ret); } int my_main() { puts("This is a program without a main() function!"); return 0; } 次のコマンドでコンパイルします。 gcc -o my_main my_main.c –nostartfiles 次のコマンドで実行します。 ./my_main いつこの種のことをする必要があるでしょうか?これが役立つであろう現実のシナリオはありますか?
125 c 

11
Cで最も一般的な命名規則は何ですか?
Cで一般的に使用される命名規則は何ですか?少なくとも2つあることを知っています。 GNU / linux / lower_case_functionsを使用したK&R ?名前 ?UpperCaseFoo関数を使用 私はここでのみCについて話しています。私たちのプロジェクトのほとんどは、Cを使用する小さな組み込みシステムです。 これが私が次のプロジェクトで使用することを計画しているものです: Cの命名規則 Struct TitleCase Struct Members lower_case or lowerCase Enum ETitleCase Enum Members ALL_CAPS or lowerCase Public functions pfx_TitleCase (pfx = two or three letter module prefix) Private functions TitleCase Trivial variables i,x,n,f etc... Local variables lower_case or lowerCase Global variables …

15
C配列に値が存在するかどうかをすばやく見つけるには?
サイズが256(できれば1024、ただし256が最小)の配列を反復処理し、値が配列の内容と一致するかどうかを確認する必要のある、タイムクリティカルなISRを備えた組み込みアプリケーションがあります。boolこの場合、A はtrueに設定されます。 マイクロコントローラーはNXP LPC4357、ARM Cortex M4コア、コンパイラーはGCCです。私はすでに最適化レベル2(3は遅い)を組み合わせ、フラッシュではなくRAMに関数を配置しています。また、ポインター演算とforループを使用します。これは、アップではなくダウンカウントを行います(かどうかのチェックi!=0は、かどうかのチェックよりも高速ですi<256)。結局のところ、私は12.5 µsの持続時間で終了していますが、これは実現可能にするために大幅に削減する必要があります。これは私が今使っている(疑似)コードです: uint32_t i; uint32_t *array_ptr = &theArray[0]; uint32_t compareVal = 0x1234ABCD; bool validFlag = false; for (i=256; i!=0; i--) { if (compareVal == *array_ptr++) { validFlag = true; break; } } これを行う最も速い方法は何でしょうか?インラインアセンブリの使用が許可されています。他の「あまりエレガントでない」トリックも許可されています。


4
unsigned short intのフォーマット指定子は何ですか?
次のプログラムがあります #include <stdio.h> int main(void) { unsigned short int length = 10; printf("Enter length : "); scanf("%u", &length); printf("value is %u \n", length); return 0; } これを使用してコンパイルするとgcc filename.c、次の警告が発行されます(scanf()行内)。 warning: format ‘%u’ expects argument of type ‘unsigned int *’, but argument 2 has type ‘short unsigned int *’ [-Wformat] それから呼ばC99 specification …
124 c  scanf 

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