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

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

7
Cでの配列の初期化に関する混乱
C言語で、次のように配列を初期化する場合: int a[5] = {1,2}; 明示的に初期化されていない配列のすべての要素は、ゼロで暗黙的に初期化されます。 しかし、私がこのような配列を初期化すると: int a[5]={a[2]=1}; printf("%d %d %d %d %d\n", a[0], a[1],a[2], a[3], a[4]); 出力: 1 0 1 0 0 わかりません、なぜ代わりにa[0]印刷1するの0ですか?未定義の動作ですか? 注:この質問はインタビューで尋ねられました。

7
C int配列をゼロにリセット:最速の方法?
T myarray[100]with T = int、unsigned int、long long intまたはunsigned long long int があると仮定すると、すべてのコンテンツをゼロにリセットする最も速い方法は何ですか(初期化のためだけでなく、プログラムでコンテンツを数回リセットするため) ?多分memsetで? のような動的配列についても同じ質問ですT *myarray = new T[100]。
102 c++  c  arrays  memset 

2
「バイト数」をゼロに設定してmemcpy()およびmemmove()を呼び出すことはできますか?
私はactully移動することは何もないとき/治療の例に必要でコピーしていますmemmove()/ memcpy()エッジケースなど int numberOfBytes = ... if( numberOfBytes != 0 ) { memmove( dest, source, numberOfBytes ); } または私はチェックせずに関数を呼び出す必要があります int numberOfBytes = ... memmove( dest, source, numberOfBytes ); 前のスニペットのチェックは必要ですか?
102 c++  c  pointers  memcpy  memmove 

2
GCC -g vs -g3 GDBフラグ:違いは何ですか?
CソースコードをgccまたはClangでコンパイルするときは、常に-gフラグを使用してgdbのデバッグ情報を生成します。 gcc -g -o helloworld helloworld.c -g3代わりに推奨する人もいることに気づきました。-gと-g3フラグの違いは何ですか?また、との違いは-gあり-ggdbますか?
102 c  debugging  gcc  gdb  clang 

4
CコードでのC ++ライブラリの使用
データを管理するためのさまざまなクラスを提供するC ++ライブラリがあります。ライブラリのソースコードがあります。 ライブラリをCコードとC ++コードで同時に使用できるように、C ++ APIを拡張してC関数呼び出しをサポートする必要があります。 私はGNUツールチェーン(gcc、glibcなど)を使用しているため、言語とアーキテクチャのサポートは問題になりません。 これが技術的に不可能である理由はありますか? 注意が必要な落とし穴はありますか? これに関して利用可能なリソース、コード例、ドキュメントはありますか? 私が見つけた他のいくつかのこと: 以下を使用して、Cコードで使用する必要があるC ++ヘッダーをラップします。 #ifdef __cplusplus extern "C" { #endif // // Code goes here ... // #ifdef __cplusplus } // extern "C" #endif 「実際の」C ++インターフェースは、Cには含まれていない個別のヘッダーファイルに保存します。ここではPIMPLの原則を考えます。#ifndef __cplusplus #errorものを使用すると、狂気を検出するのに役立ちます。 Cコードの名前としてのC ++識別子の注意 CおよびC ++コンパイラ間でサイズが異なる列挙型。GNUツールチェーンを使用している場合はおそらく問題ではありませんが、それでも注意してください。 Cが混乱しないように、構造体については次の形式に従ってください。 typedef struct X { ... } X 次に、C …
102 c++  c  gcc  glibc 


7
CRC32チェックサムはどのように計算されますか?
多分私はそれを見ていないだけかもしれませんが、CRC32は不必要に複雑であるか、ウェブ上で見つけることができるどこでも十分に説明されていないようです。 (生成)多項式で除算された、メッセージ値の非キャリーベースの算術除算の余りであることを理解していますが、それを実際に実装すると私はエスケープされます。 私はCRCエラー検出アルゴリズムの痛みのないガイドを読みました。それは理論をかなりうまく行きます、しかし著者は単純な「これだけです」に決して行きません。彼は標準のCRC32アルゴリズムのパラメーターは何かと言っていますが、どのようにしてそれを実現するかを明確に説明することを怠っています。 私を引き付ける部分は、彼が「これだ」と言ってから付け加えたときです。追加したすべての変更を指定してCRC32チェックサムを計算する方法。 CRC32の計算方法の簡単な説明はありますか? テーブルがどのように形成されるかをCでコーディングしようとしました: for (i = 0; i < 256; i++) { temp = i; for (j = 0; j < 8; j++) { if (temp & 1) { temp >>= 1; temp ^= 0xEDB88320; } else {temp >>= 1;} } testcrc[i] = temp; } しかし、これはインターネット上の他の場所で見つけた値と一致しない値を生成するようです。私は可能性があり、私はオンラインで見つけるの値を使用しますが、私は彼らが作成されたかを理解したいと思います。 これらの非常に紛らわしい数値を解決するための助けがあれば非常にありがたいです。
102 c  checksum  crc32 

24
WebアプリにCを使用しないのはなぜですか?
今朝、G-WANに遭遇したとき、いくつかの異なるWebサーバーを調べていました。私が理解しているように、Cで記述されたWebサーバーであり、CでWebサイト/ Webアプリケーションを作成することによってそれを利用する必要があります。G-WANサイトが示唆するように、明確な利点の1つは速度です。 ただし、フォーラムでは、G-WANの作成者がWebベースのアプリにCを使用しないのはなぜかと質問しましたが、難しいこと以外は1つの理由を考えることができません(とにかく、私はCの初心者です)。これらの言語で開発するのが簡単であること以外に、PHP、Python、Rubyなどを使用する理由は他にもあります。それを正当な理由とは思いません。 だから私はそれをあなたに言います:なぜあなたはあなたのウェブアプリにCを使わないのですか?
101 php  c  web-applications 

16
C ++を使用してナノ秒単位で時間を提供するタイマー関数
APIが値を返すのにかかった時間を計算したいと思います。このようなアクションにかかる時間は、ナノ秒単位です。APIはC ++クラス/関数なので、同じことを計算するためにtimer.hを使用しています。 #include <ctime> #include <cstdio> using namespace std; int main(int argc, char** argv) { clock_t start; double diff; start = clock(); diff = ( std::clock() - start ) / (double)CLOCKS_PER_SEC; cout<<"printf: "<< diff <<'\n'; return 0; } 上記のコードは秒単位で時間を与えます。どのようにしてナノ秒単位で、より正確に同じを得ますか?
101 c++  c  timer 

4
uint32_tおよびsize_tのprintf形式指定子
私は以下を持っています size_t i = 0; uint32_t k = 0; printf("i [ %lu ] k [ %u ]\n", i, k); コンパイル時に次の警告が表示されます。 format ‘%lu’ expects type ‘long unsigned int’, but argument has type ‘uint32_t’ スプリントを使用してこれを実行すると、次の結果が得られました。 Format argument 1 to printf (%u) expects unsigned int gets size_t: k アドバイスありがとうございます。
101 c  printf 

1
C集計初期化子で[N…M]はどういう意味ですか?
sys.c行123 から: void *sys_call_table[__NR_syscalls] = { [0 ... __NR_syscalls-1] = sys_ni_syscall, #include <asm/unistd.h> }; sys_call_table配列への一般的なポインタであることがわかります。ただし、表記は次のとおりです。 [0 ... __NR_syscalls-1] とは...? 編集: 私はここに別のCのトリックを学んだ:#include <asm/unistd.h>される前処理し、その内容に置き換えるとに割り当てられています[0 ... _NR_syscalls-1]。
101 c  linux  kernel 

14
C / C#/ C ++で逆方向ループを実行する最良の方法は何ですか?
配列を逆方向に移動する必要があるため、次のようなコードがあります。 for (int i = myArray.Length - 1; i >= 0; i--) { // Do something myArray[i] = 42; } これを行うより良い方法はありますか? 更新:多分C#に次のような組み込みメカニズムがあるといいのですが。 foreachbackwards (int i in myArray) { // so easy } アップデート2:存在しているより良い方法は。ルーンは賞品を受け取ります: for (int i = myArray.Length; i-- > 0; ) { //do something } //or for (int i …
101 c#  c++  c 

13
Cでcatchステートメントを試す
今日、他の言語に存在するtry / catchブロックについて考えていました。これはしばらくの間グーグルでしたが結果はありませんでした。私が知っていることから、Cにはtry / catchのようなものはありません。しかし、それらを「シミュレート」する方法はありますか? もちろん、アサートやその他のトリックはありますが、発生した例外をキャッチするtry / catchのようなものはありません。ありがとうございました
101 c 


5
「バックスペース」エスケープ文字「\ b」:予期しない動作?
だから私はようやくK&Rを読んでいて、最初の数ページの中で、バックスペースエスケープ文字があることを学びました\b。 だから私はそれをテストしてみると、いくつかの非常に奇妙な動作があります: #include <stdio.h> main () { printf("hello worl\b\bd\n"); } 出力は hello wodl 誰かこれを説明できますか?

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