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

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

12
Cメモリ管理
Cでは、メモリの管理方法を実際に監視する必要があるといつも聞いています。そして、私はまだCを学び始めていますが、これまでのところ、関連するアクティビティを管理するメモリをまったくする必要がありませんでした。私は、変数を解放してあらゆる種類の醜いことをしなければならないことを常に想像していました。しかし、そうではないようです。 誰かが「コード管理」を使って、「メモリ管理」をしなければならないときの例を見せてくれますか?
90 c  memory 

29
ポインターの有効性のテスト(C / C ++)
与えられたポインタが「有効」かどうかを(プログラム的にはもちろん)判断する方法はありますか?NULLのチェックは簡単ですが、0x00001234のようなものはどうですか?この種類のポインタを逆参照しようとすると、例外/クラッシュが発生します。 クロスプラットフォームの方法が推奨されますが、プラットフォーム固有(WindowsおよびLinuxの場合)でも問題ありません。 明確化のための更新: 問題は、古くなった、解放された、初期化されていないポインターには関係ありません。代わりに、呼び出し元からポインターを取得するAPI(文字列へのポインター、ファイルハンドルなど)を実装しています。呼び出し元は、ポインタとして(意図的または誤って)無効な値を送信できます。クラッシュを防ぐにはどうすればよいですか?
90 c++  c  validation  pointers  null 

1
Linuxコマンドを使用して16進情報をバイナリに変換する
Linuxシステムにこのバイナリファイルがあります... udit@udit-Dabba ~ $ cat file.enc Salted__s�bO��<0�F���Jw!���]�:`C�LKȆ�l hexdumpコマンドを使用すると、次のような情報が表示されます。 udit@udit-Dabba ~ $ hexdump -C file.enc 00000000 53 61 6c 74 65 64 5f 5f 1b 73 a1 62 4f 15 be f6 |Salted__.s.bO...| 00000010 3c 30 cc 46 ee 10 13 11 84 bf 4a 77 21 a4 84 99 |<0.F......Jw!...| …

4
固定サイズの浮動小数点型
stdint.h(C99)、ブースト/ cstdint.hpp、及びcstdint(C ++ 0X)ヘッダタイプは、とりわけ、ありますint32_t。 同様の固定サイズの浮動小数点型はありますか?のようなものfloat32_t?
90 c++  c  boost  floating-point 

5
gdb:「シンボルテーブルが読み込まれていません」
gdbにブレークポイントを追加しようとすると、このエラーメッセージが表示され続けます。 これらのコマンドを使用してコンパイルしました: gcc -g main.c utmpib2.c -o main.o and: cc -g main.c utmpib2.c -o main.o and also: g++ -g main.c utmpib2.c -o main.o 「-g」の代わりに「-ggdb」も試しましたが、それでもエラーメッセージが表示されます。 次に、gdbを実行します。 $gdb gdbの場合: (gdb)exec-file main.o (gdb)break 59 No symbol table is loaded. Use the "file" command.
90 c  gdb 

3
Cプリプロセッサを使用してintを文字列に連結
Cプリプロセッサを使用して、#define'd intを#define' d文字列に連結する方法を理解しようとしています。私のコンパイラはCentOS 5上のGCC 4.1です。このソリューションはMinGWでも機能するはずです。 文字列にバージョン番号を追加したいのですが、それを機能させる唯一の方法は、バージョン番号の定義を文字列としてコピーすることです。 私が見つけた最も近いものはマクロ引数を引用する方法でしたが、それは#defines では機能しません これは機能しません。 #define MAJOR_VER 2 #define MINOR_VER 6 #define MY_FILE "/home/user/.myapp" #MAJOR_VER #MINOR_VER #値が数値であり、に展開されるため、sがなければ機能しません。"/home/user/.myapp" 2 6これは有効なCではありません。 これは機能しますが、バージョン定義のコピーを番号としても必要とするので、私はバージョン定義のコピーが好きではありません。 #define MAJOR_VER 2 #define MINOR_VER 6 #define MAJOR_VER_STR "2" #define MINOR_VER_STR "6" #define MY_FILE "/home/user/.myapp" MAJOR_VER_STRING MINOR_VER_STRING

6
GCCとClangパーサーは本当に手書きですか?
GCCとLLVM-Clangは、手書きの再帰下降パーサーを使用しており、マシンで生成されたBison-Flexベースのボトムアップ解析ではないようです。 ここの誰かがこれが事実であることを確認できますか?もしそうなら、なぜ主流のコンパイラフレームワークは手書きのパーサーを使用するのですか? 更新:このトピックに関する興味深いブログはこちら

7
2D配列を1D配列にマッピングします
2D配列を1D配列で表現したい。関数は、2つのインデックス(x、y)と格納する値を渡します。これらの2つのインデックスは、1D配列の単一の要素を表し、それに応じて設定します。1D配列はarrayWidth×arrayHeightのサイズである必要があることは知っていますが、各要素を設定する方法がわかりません。 たとえば、(2,4,3)と(4,2,3)を区別するにはどうすればよいですか?配列をx * yとして設定しようとしましたが、2 * 4と4 * 2は配列内の同じスポットになり、異なる必要があります。

4
C ++コードからC関数を呼び出す
C ++から呼び出したいC関数があります。extern "C" void foo()C関数がg ++を使用してコンパイルできなかったため、 " "のようなアプローチを使用できませんでした。ただし、gccを使用すると正常にコンパイルされます。C ++から関数を呼び出す方法はありますか?
90 c++  c  linux  extern-c 

7
符号なしデータ型とは何ですか?
このunsigned「タイプレス」タイプが数回使用されているのを見たことがありますが、その説明は見たことがありません。対応するsignedタイプがあると思います。次に例を示します。 static unsigned long next = 1; /* RAND_MAX assumed to be 32767 */ int myrand(void) { next = next * 1103515245 + 12345; return((unsigned)(next/65536) % 32768); } void mysrand(unsigned seed) { next = seed; } これまでに収集したもの: -私のシステムではsizeof(unsigned) = 4(32ビットのunsigned intでヒント) -別の型をunsignedバージョンにキャストするための省略形として使用される可能性があります: signed long int i = -42; printf("%u\n", (unsigned)i); …
90 c  types  unsigned 

5
GCCの致命的なエラー:stdio.h:そのようなファイルまたはディレクトリはありません
GCC 4.9(実験的)を使用してOS X10.9上のCでプログラムをコンパイルしようとしています。何らかの理由で、コンパイル時に次のエラーが発生します。 gcc: fatal error: stdio.h: No such file or directory 次に、簡単なHelloWorldプログラムを試しました。 #include <stdio.h> int main(int argc, const char *argv[]) { printf("Hello, world!"); return 0; } 繰り返しますがgcc -o ~/hello ~/hello.c、実行すると、同じエラーが発生しました。の実験バージョンを使用してgccいますが、インポート時にエラーが発生するリリースがあるとは考えられませんstdio。この問題の原因は何ですか?また、どのように修正できますか?
90 c  gcc  stdio 

4
HTTPPOSTを実行して応答を消費する単純なCの例
HTTPPOSTを実行する非常に単純なCアプリケーションを作成したいと思います。いくつかのパラメーターを取り、これらを使用してURLを作成します。単純なHTTPPOSTを実行し、curlを使用せずに応答を取得したいと思います(ライブラリは、これを実行する必要のあるマシンにインストールされておらず、インストールされません)。 擬似コード: 2つの引数を処理します テンプレートURLに引数を入力します:http://api.somesite.com/apikey=ARG1&command=ARG2 生成されたURLでPOSTを実行します 応答を消費する 私のグーグルとSOの検索はこの問題に関して何ももたらさなかった。
90 c  http  http-post 

10
CMakeはC ++でリンカー言語を判別できません
Visual Studio2010とCygwinの両方を使用してWindows7x64でcmakehello worldプログラムを実行しようとしていますが、どちらも機能しないようです。私のディレクトリ構造は次のとおりです。 HelloWorld -- CMakeLists.txt -- src/ -- -- CMakeLists.txt -- -- main.cpp -- build/ cd build続いて、を実行するcmake ..と、エラーが発生します。 CMake Error: CMake can not determine linker language for target:helloworld CMake Error: Cannot determine link language for target "helloworld". ただし、ファイルシステムとsrc/CMakeLists.txtすべての両方でmain.cppの拡張子をmain.cに変更すると、期待どおりに機能します。これは、Visual Studioコマンドプロンプト(Visual Studio Solution Generator)とCygwinターミナル(Unix Makefiles Generator)の両方から実行される場合です。 このコードが機能しない理由はありますか? CMakeLists.txt PROJECT(HelloWorld C) cmake_minimum_required(VERSION …
90 c++  c  cmake 

4
インポートライブラリはどのように機能しますか?詳細?
これはオタクにとってはかなり基本的なことのように思えるかもしれません。しかし、私はそれを明確にしたい。 Win32 DLLを使用する場合、通常はLoadLibrary()やGetProcAdderss()などのAPIを呼び出すだけです。しかし最近、DirectX9で開発しているので、d3d9.lib、d3dx9.libなどのファイルを追加する必要があります。 LIBは静的リンク用で、DLLは動的リンク用であると十分に聞いています。 したがって、私の現在の理解では、LIBにはメソッドの実装が含まれており、最終的なEXEファイルの一部としてリンク時に静的にリンクされます。DLLは実行時に動的にロードされ、最終的なEXEファイルの一部ではありません。 しかし、時には、いくつかのLIBファイルそこにいると来そう、DLLファイル: これらのLIBファイルは何のためのものですか? 彼らはどのように彼らが意図されていることを達成しますか? これらのLIBファイルの内部を検査できるツールはありますか? アップデート1 ウィキペディアをチェックした後、これらのLIBファイルはインポートライブラリと呼ばれていることを思い出します。しかし、メインアプリケーションと動的にロードされるDLLでどのように機能するのか疑問に思っています。 アップデート2 RBerteigが言ったように、DLLで生まれたLIBファイルにはいくつかのスタブコードがあります。したがって、呼び出しシーケンスは次のようになります。 私のメインアプリケーション-> LIBのスタブ->実際のターゲットDLL では、これらのLIBにはどのような情報を含める必要がありますか?私は次のことを考えることができます: LIBファイルには、対応するDLLのフルパスが含まれている必要があります。したがって、DLLはランタイムによってロードされる可能性があります。 各DLLエクスポートメソッドのエントリポイントの相対アドレス(またはファイルオフセット?)は、スタブでエンコードする必要があります。したがって、正しいジャンプ/メソッド呼び出しを行うことができます。 私はこれで正しいですか?他に何かありますか? ところで:インポートライブラリを検査できるツールはありますか?私がそれを見ることができれば、これ以上の疑いはありません。
90 c++  c  windows  visual-c++ 

3
PDF形式のC89 / C90標準はどこにありますか?
C89 / C90規格の無料コピー版を探していますが、どこにも見つかりません。なぜそれを見つけるのがとても難しいのですか? C99およびC11標準は、インターネットでコピーを入手するのが非常に簡単です。StackOverflowの質問でも現在のCまたはC ++標準ドキュメントはどこにありますか?そしてC標準は、標準を取得することは、私が探しているものを含んでいません。 Web検索も役に立ちませんでしたし、オープンスタンダードも役に立ちませんでした。
90 c  ansi  c89 

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