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

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

4
表面とテクスチャの違い(SDL /一般)
テクスチャと表面の違いは何ですか?簡単な言葉で誰かが私に説明できますか?SDL2asSDL_Surfaceとで使われているのを見ましたSDL_Texture。SDL_Textureが作成され、SDL_Surfaceそこから画像/ビットマップから作成されます。どちらもピクセルのコレクションです。しかし、私はそれらの間の主な違いを見ていません(GPUで何かをしなければなりませんか?) 私はそれをグーグルで検索しようとしましたが、私が見つけたすべての説明は複雑すぎて、コンピュータグラフィックスのことを深く掘り下げずに理解することはできませんでした。
83 c  graphics  sdl  sdl-2 

5
壊れたパイプエラーの原因は何ですか?
ピア側のソケットを閉じると、パイプの破損エラーがスローされることを知っています。 しかし、私のテストでは、ピア側が閉じているときにこちら側ですぐに「送信」呼び出しを行うと、必ずしもパイプの破損エラーが発生するとは限らないことに気付きました。 例えば: ピア側のソケットを閉じた後(closeを呼び出してクリーンクローズを試み、ピアを強制終了して異常なクローズを試みました)、40バイトを送信しようとすると、パイプが壊れることはありませんが、 40000バイトを送信すると、すぐに壊れたパイプエラーが発生します。 パイプの破損の正確な原因とその動作を予測できますか?
83 c  broken-pipe 



6
scanfがCでバッファオーバーフローを引き起こすのを防ぐ方法は?
私はこのコードを使用します: while ( scanf("%s", buf) == 1 ){ ランダムな長さの文字列を渡すことができるように、バッファオーバーフローの可能性を防ぐための最良の方法は何でしょうか? たとえば、次のように呼び出すことで、入力文字列を制限できることはわかっています。 while ( scanf("%20s", buf) == 1 ){ しかし、ユーザーが入力したものは何でも処理できるようにしたいと思います。または、scanfを使用してこれを安全に行うことはできず、fgetsを使用する必要がありますか?

4
CはC ++よりも著しく高速です[クローズ]
現在のところ、この質問は私たちのQ&A形式には適していません。回答は事実、参考資料、または専門知識によって裏付けられることを期待していますが、この質問は、討論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターにアクセスしてガイダンスを入手してください。 9年前に閉鎖されました。 私が理解している限り、すべてのスクリプト言語とコア科学プログラムは通常Cで書かれています。これにより、実装が煩雑になりますが、ポイントにまっすぐになります。 これらの人々がパフォーマンスを最大化したいと思っていることは理解していますが、C文字列とC構造体を使用することとC ++クラスを使用することには本当の違いがあります。C ++は、仮想関数を除いて同じように機能するようですが、クラス関数を1回格納し、そのクラスのすべてのインスタンスがその1つの関数を呼び出します。 Cを高速化する理由と、最速でなければならないpythonやsqliteなどのプロジェクトの顕著な違いは何ですか?
83 c++  c  performance 

6
#define内の#ifdef
私はこのようなものを書き込もうとしています: #define COV_ON(x) \ #ifdef COVERAGE_TOOL \ _Pragma (COVERAGE #x) #endif COV_ONこのように定義する方法はありますか?#ifdef#defineの内部に入れることができないので、上記で行ったことは間違っていることを知っています。(#で許可されている文字ではありません#define)。それで、解決策はありますか?
83 c  c-preprocessor 

3
freeの戻り値をvoidにキャストする理由
私はCを使用した本(Butenhofによるプログラミング、POSIXスレッドによるプログラミング、1997)を読んでいて、次の行に出くわしました。 (void)free(data); ここでdataは、割り当てられた構造体への単なるポインタですが、 data = malloc(sizeof(my_struct_t)); freeキャストされた結果はなぜvoidですか? Cについての私の理解から、これは2つの理由で意味をなさないようです: 無料の関数はすでに戻ります void コードは戻り値を使用していません(変数に割り当てられていません) 本は1997年に書かれました。これはある種のレガシーなものですか? 著者は、例がDigital Unix 4.0dで実行されたと述べていますが、その結果を使用しないのであれば、関数の結果をキャストする理由を想像することはできません。
82 c  casting  free  void  legacy-code 

10
main関数でargcとargvの名前を変更しても安全ですか?
多くのプログラムは、多くの引数と文字列の配列に標準名を使用します。main関数のプロトタイプは次のようになりますint main(int argc, char *argv[]);。しかし、これらの変数にカスタム名を選択した場合、何かが壊れますか? 例えば int main(int n_of_args, char *args[]); コンパイラーのコンテキストでは、すべてが正常です。これらの変数はmain関数に対してローカルであるため、任意の名前を付けることができます。そして、単純なコードは完全に構築され、実行されます。ただし、これらの名前はプリプロセッサによって使用される場合があります。では、これらの引数の名前を変更しても安全ですか? PS個人的には、これらの名前は非常によく似ており、1文字だけが異なるため、悪いと思います。しかし、誰もが何らかの理由でそれらを使用しています。
82 c++  c  main 

5
スタンフォードのチュートリアルとGCCの間の競合
この映画(約38分)によると、同じローカル変数を持つ2つの関数がある場合、それらは同じスペースを使用します。したがって、次のプログラムは、を出力する必要があります5。gcc結果とともにコンパイルします-1218960859。どうして? プログラム: #include <stdio.h> void A() { int a; printf("%i",a); } void B() { int a; a = 5; } int main() { B(); A(); return 0; } 要求に応じて、逆アセンブラからの出力は次のとおりです。 0804840c <A>: 804840c: 55 push ebp 804840d: 89 e5 mov ebp,esp 804840f: 83 ec 28 sub esp,0x28 8048412: 8b 45 f4 …

3
静的にリンクされたライブラリ間のシンボルの衝突に対処するにはどうすればよいですか?
ライブラリを作成する際の最も重要なルールとベストプラクティスの1つは、ライブラリのすべてのシンボルをライブラリ固有の名前空間に配置することです。C ++は、namespaceキーワードにより、これを簡単にします。Cでは、通常のアプローチは、識別子にライブラリ固有のプレフィックスを付けることです。 ACコンパイラは、識別子の最初の8つの文字を見てもよいので、:C標準のルールは、(安全なコンパイルのために)それらの上にいくつかの制約を置くfoobar2k_eggsとfoobar2k_spam有効に同じ識別子として解釈することができる-しかし、すべての近代的なコンパイラは、任意の長い識別子が可能になりますですから、私たちの時代(21世紀)では、これについて気にする必要はありません。 しかし、シンボル名/識別子を変更できないライブラリに直面している場合はどうなりますか?静的バイナリとヘッダーしか取得していないか、取得したくないか、自分で調整して再コンパイルすることが許可されていない可能性があります。

2
未使用の行をコメントアウトした後、Switch-caseはコンパイルされません
これが私のコードです: #include <stdio.h> #include <string.h> #include <stdlib.h> #include <netdb.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> int main (void) { struct addrinfo hints; memset (&hints, 0, sizeof hints); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_DGRAM; hints.ai_flags = AI_CANONNAME; struct addrinfo *res; getaddrinfo ("example.com", "http", &hints, &res); printf ("Host: %s\n", "example.com"); void *ptr; …
82 c 

2
「2i;」という文はなぜですか。コンパイラエラーを引き起こしませんか?
の代わりに2*i、私は不注意に書いた2i: int foo(int i) { 2i; return 2i; } コンパイラがエラーをキャッチすることを期待していました。しかし、そうではありませんでした。では2i、Cの有効なステートメントはありますか?もしそうなら、それは何をしますか?困惑! gccバージョン5.3.0を使用してコンパイルしました。アセンブリ出力は次のとおりです。 .file "strange.c" .text .globl foo .type foo, @function foo: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl %edi, -4(%rbp) nop popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE0: .size foo, .-foo .ident …
82 c  syntax 


8
Cプログラミング:Unicode用にプログラミングする方法は?
厳密なUnicodeプログラミングを行うにはどのような前提条件が必要ですか? これは、私のコードがcharどこでも型を使用してはならず、wint_tおよびを処理できる関数を使用する必要があることを意味しwchar_tますか? そして、このシナリオでマルチバイト文字シーケンスが果たす役割は何ですか?

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