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

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

10
C / C ++アプリケーション用のオープンソースPDFライブラリ?[閉まっている]
閉まっている。この質問はスタックオーバーフローのガイドラインを満たしていません。現在、回答を受け付けていません。 この質問を改善してみませんか?Stack Overflowのトピックとなるように質問を更新します。 6年前休業。 この質問を改善する (ネイティブ)C ++ WindowsアプリケーションからPDF出力を生成できるようにしたいのですが。これを行うために利用できるフリー/オープンソースのライブラリはありますか? 私はこの質問への回答を見ましたが、それらは主に.Netに関連しています。
91 c++  c  pdf  open-source 

17
return付きのswitchステートメント—コードの正確さ
Cにほぼこの構造のコードがあるとします。 switch (something) { case 0: return "blah"; break; case 1: case 4: return "foo"; break; case 2: case 3: return "bar"; break; default: return "foobar"; break; } 明らかに、breaksはコードを正しく実行するために必要ではありませんが、私がそれらをそこに置かなければ、それは一種の悪い習慣のように見えます。 どう思いますか?削除しても大丈夫ですか?または、「正確さ」を高めるためにそれらを保持しますか?


1
##(ダブルハッシュ)はプリプロセッサディレクティブで何をしますか?
#define DEFINE_STAT(Stat) \ struct FThreadSafeStaticStat<FStat_##Stat> StatPtr_##Stat; 上記の行はUnreal4からの抜粋であり、Unrealフォーラムで質問できることはわかっていますが、これは一般的なC ++の質問であり、ここで質問する必要があると思います。 最初の行がマクロを定義していることは理解していますが、C ++のプリプロセッサのシェナニガンに精通していないため、そこで迷子になっています。ロジックによると、バックスラッシュは宣言が次の行に続くことを意味します。 FThreadSafeStaticStatはテンプレートに少し似ていますが、そこには#があり、C ++ではこれまでに見たことのない構文があります。 誰かがこれが何を意味するのか教えてもらえますか?Unreal 4にアクセスできない可能性があることは理解していますが、それは私が理解していない構文にすぎません。




8
CポインタをNULLに初期化することは可能ですか?
私は次のようなものを書いていた char *x=NULL; という前提で char *x=2; charアドレス2へのポインタを作成します。 しかし、GNU Cプログラミングチュートリアルではint *my_int_ptr = 2;、整数値2は、my_int_ptr割り当て時にランダムなアドレスに格納されると記載されています。 これは、自分char *x=NULLのNULLキャストの値がcharメモリ内のランダムなアドレスに割り当てられていることを意味しているようです。 ながら #include <stdlib.h> #include <stdio.h> int main() { char *x=NULL; if (x==NULL) printf("is NULL\n"); return EXIT_SUCCESS; } 実際には、印刷します 無効です コンパイルして実行するとき、未定義の動作、または少なくとも仕様不足の動作に依存していること、および char *x; x=NULL; 代わりに。



2
<string.h>と<strings.h>の違い
(少なくともMac OS Xでは)&lt;string.h&gt;ヘッダーとヘッダーの両方があることに気づきました&lt;strings.h&gt;。man 3 stringそれらが異なる機能を含んでいることを明らかにします。これには理由がありますか?
90 c  string  header 

2
これは何ですか (( ))?
gccコンパイラのソースコード(gcc / c-family / c-pragma.c)を参照すると、次のようになります。 typedef struct GTY(()) align_stack { int alignment; tree id; struct align_stack * prev; } align_stack; 何年も前にCプログラミングをたくさん行っていても、これらのビット(())はまだ完全に不明です。誰かがそれらの意味を説明できますか?グーグルはそれを見つけていないようです。
90 c++  c 

1
JavaをCよりも解析しやすくするものは何ですか?
CとC ++の文法はコンテキスト依存であり、特にCで「レクサーハック」が必要であるという事実を知っています。一方、Javaのみを解析できるという印象を受けました2つの言語間のかなりの類似性にもかかわらず、先読みの2つのトークン。 解析しやすくするために、Cについて何を変更する必要がありますか? 私がCの状況依存性を見た例はすべて技術的には許容できるが、ひどく奇妙なので、私は尋ねます。例えば、 foo (a); foo引数付きのvoid関数を呼び出している可能性がありますa。または、それaはタイプのオブジェクトであると宣言することfooもできますが、同様に簡単に括弧を取り除くことができます。この奇妙さは、C文法の「直接宣言子」生成規則が関数と変数の両方を宣言するという二重の目的を満たすために発生します。 一方、Java文法では、変数宣言と関数宣言に別々の生成規則があります。あなたが書くなら foo a; すると、それが変数宣言でありfoo、型名として明確に解析できることがわかります。foo現在のスコープのどこかにクラスが定義されていない場合、これは有効なコードではない可能性がありますが、これは、後のコンパイラパスで実行できるセマンティック分析の仕事です。 typedefのためにCは解析が難しいと言われているのを見てきましたが、Javaでも独自の型を宣言できます。に加えてdirect_declarator、どのC文法規則に誤りがありますか?
90 java  c  parsing  grammar 

16
i ++はスレッドセーフではないと聞きましたが、++ iはスレッドセーフですか?
アセンブリでは元の値を一時としてどこかに保存し、それをインクリメントしてから置き換えるので、コンテキストスイッチによって中断される可能性があるため、i ++はスレッドセーフなステートメントではないと聞きました。 しかし、++ iについて疑問に思っています。私の知る限り、これは 'add r1、r1、1'などの単一のアセンブリ命令に削減されます。これは1つの命令のみであるため、コンテキストスイッチによって中断されません。 誰かが明確にできますか?x86プラットフォームが使用されていると想定しています。
90 c++  c  multithreading 

5
backtrace()/ backtrace_symbols()に関数名を出力させる方法は?
Linux固有でbacktrace()ありbacktrace_symbols()、プログラムの呼び出しトレースを生成できます。ただし、これは関数アドレスのみを出力し、プログラムの名前は出力しません。関数名も出力させるにはどうすればよいですか?-gだけでなく、プログラムをコンパイルしてみました-ggdb。以下のテストケースはこれを出力するだけです: バックトレース------------ ./a.out()[0x8048616] ./a.out()[0x8048623] /lib/libc.so.6(__libc_start_main+0xf3)[0x4a937413] ./a.out()[0x8048421] ---------------------- 私は、また、関数名を表示するには最初の2つの項目をしたいと思いますfooし、main コード: #include &lt;execinfo.h&gt; #include &lt;string.h&gt; #include &lt;errno.h&gt; #include &lt;unistd.h&gt; #include &lt;stdlib.h&gt; static void full_write(int fd, const char *buf, size_t len) { while (len &gt; 0) { ssize_t ret = write(fd, buf, len); if ((ret == -1) &amp;&amp; (errno != EINTR)) break; buf …
90 c  linux  debugging  backtrace 

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