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

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

8
Cのchar配列とcharポインタの違いは何ですか?
私はCのポインターを理解しようとしていますが、現在は以下と混同しています。 char *p = "hello" これは、hから始まる文字配列を指すcharポインターです。 char p[] = "hello" これはhelloを格納する配列です。 これらの両方の変数をこの関数に渡したときの違いは何ですか? void printSomething(char *p) { printf("p: %s",p); }
216 c  arrays  pointers 

30
なぜプログラムはアセンブリでより頻繁に記述されないのですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。私たちは回答が事実、参考文献、または専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張された議論を誘います。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 ロックされています。質問はトピックから外れていますが、歴史的に重要であるため、この質問とその回答はロックされています。現在、新しい回答や相互作用を受け入れていません。 アセンブリプログラミングはCなどの高レベルの言語よりも時間がかかり、プログラミングが難しいというのが主流の意見のようです。したがって、これらの理由により、高レベルの言語で記述する方が推奨または想定されます。移植性が向上するという理由から。 最近、私はx86アセンブリで作成しており、おそらく移植性を除いて、これらの理由はおそらく本当ではないことに気づきました。おそらく、それは親しみやすさと、アセンブリを適切に作成する方法を知っていることの問題です。また、アセンブリでのプログラミングは、HLLでのプログラミングとはかなり異なることに気づきました。おそらく、優れた経験豊富なアセンブリプログラマは、経験豊富なCプログラマがCで書くのと同じくらい簡単かつ迅速にプログラムを書くことができます。 おそらくそれは、アセンブリプログラミングがHLLとはかなり異なり、異なる考え方、方法、方法を必要とするためです。 移植性が問題でない場合、実際には、CはNASMなどの優れたアセンブラに対して何を持っているでしょうか。 編集: 指摘しておきます。アセンブリで記述する場合は、命令コードだけで記述する必要はありません。マクロとプロシージャ、および独自の規則を使用して、さまざまな抽象化を行い、プログラムをよりモジュール化し、保守しやすく、読みやすくすることができます。ここから、優れたアセンブリの作成方法に慣れることができます。

3
関数ポインターの定義がアンパサンド「&」またはアスタリスク「*」をいくつ使用しても機能するのはなぜですか?
なぜ次のように機能するのですか? void foo() { cout << "Foo to you too!\n"; }; int main() { void (*p1_foo)() = foo; void (*p2_foo)() = *foo; void (*p3_foo)() = &foo; void (*p4_foo)() = *&foo; void (*p5_foo)() = &*foo; void (*p6_foo)() = **foo; void (*p7_foo)() = **********************foo; (*p1_foo)(); (*p2_foo)(); (*p3_foo)(); (*p4_foo)(); (*p5_foo)(); (*p6_foo)(); (*p7_foo)(); }
216 c++  c  function-pointers 



3
関数名の括弧はどういう意味ですか?
プロジェクトのソースファイルの1つで、次のC関数の定義を見つけました。 int (foo) (int *bar) { return foo (bar); } 注:の横にアスタリスクがないfooため、関数ポインターではありません。またはそれは?再帰呼び出しで何が起こっているのですか?
214 c  function  parentheses 

4
OSXでの.soと.dylibの違いは何ですか?
.dylibはOSXの動的ライブラリ拡張ですが、従来のUNIXの.so共有オブジェクトを使用できない、または使用してはならない場合、私にはわかりませんでした。 私が持っている質問のいくつか: 概念的なレベルで、.soと.dylibの主な違いは何ですか? いつどちらを使用できますか? コンパイルのトリックとヒント(たとえば、osxでは機能しないため、gcc -shared -fPICの置き換え)
214 c++  c  macos  unix 

8
ソケットを閉じるかシャットダウンするか?
Cでは、ソケットを閉じると、ソケットが破棄され、後で再利用できることを理解しました。 シャットダウンはどうですか?説明は、そのソケットへの二重接続の半分を閉じると述べています。しかし、そのソケットはcloseシステムコールのように破棄されますか?
214 c  sockets  networking 

10
静的constと#define
プリプロセッサstatic constよりもvars を使用する方が良い#defineですか?それともコンテキストに依存しますか? 各方法の長所と短所は何ですか?
212 c++  c  const 

24
実行可能ファイルをリバースエンジニアリングから保護していますか?
私はC / C ++コードを逆アセンブリやリバースエンジニアリングから保護する方法を検討しています。通常、私は自分のコードでこの動作を自分で容認することは決してありません。しかし、私が取り組んでいる現在のプロトコルは、さまざまな人々のセキュリティのために、決して検査または理解されてはなりません。 今、これは私にとって新しい主題であり、インターネットはリバースエンジニアリングを防止するために実際に機知に富んでいるのではなく、リバースエンジニアリングの方法に関する大量の情報を示しています 私がこれまでに考えたことのいくつかは次のとおりです。 コードインジェクション(実際の関数呼び出しの前後にダミー関数を呼び出す) コードの難読化(バイナリの逆アセンブリを壊す) 独自のスタートアップルーチンを記述する(デバッガーがバインドするのが難しい) void startup(); int _start() { startup( ); exit (0) } void startup() { /* code here */ } デバッガーのランタイムチェック(検出された場合は強制終了) 機能トランポリン void trampoline(void (*fnptr)(), bool ping = false) { if(ping) fnptr(); else trampoline(fnptr, true); } 無意味な割り当てと割り当て解除(スタックは大幅に変更されます) 無意味なダミー呼び出しとトランポリン(逆アセンブリ出力での大量のジャンプ) 大量のキャスト(難読化された分解用) これらは私が考えたことの一部ですが、適切な時間枠が与えられれば、コードアナリストがそれらをすべて回避または把握することができます。私が持っている他の選択肢はありますか?
210 c++  c  obfuscation  assembly 

30
Windowsに代わる優れたValgrindはありますか?
ロックされています。質問はトピックから外れていますが、歴史的に重要であるため、この質問とその回答はロックされています。現在、新しい回答や相互作用を受け入れていません。 Linux専用であることがわかったとき、Cコーディング/デバッグを改善するためにValgrindを調査していました。OSをLinuxに移行することに他に必要も関心もないため、Windowsにも同等に優れたプログラムがあるかどうか疑問に思いました。


6
typedef固定長配列
24ビットのデータ型を定義する必要がありますchar[3]。型を表すために使用しています。することができます私のtypedef char[3]にtype24?コードサンプルで試してみました。typedef char[3] type24;ヘッダーファイルに入れました。コンパイラはそれについて文句を言わなかった。しかしvoid foo(type24 val) {}、Cファイルで関数を定義すると、文句を言われました。type24_to_int32(type24 val)ではなくのような関数を定義できるようにしたいと思いますtype24_to_int32(char value[3])。
210 c  arrays  gcc  typedef 

12
#Cでデバッグ印刷用のマクロを定義しますか?
次の疑似コードのように、DEBUGが定義されているときにデバッグメッセージの印刷に使用できるマクロを作成しようとしています。 #define DEBUG 1 #define debug_print(args ...) if (DEBUG) fprintf(stderr, args) これはマクロでどのように行われますか?
209 c  c-preprocessor 

24
親が終了した後に子プロセスを停止させる方法は?
ちょうど1つの子プロセスを生成するプロセスがあるとします。親プロセスが何らかの理由(通常または異常、kill、^ C、assert failureなど)で終了した場合、子プロセスを終了させます。それを正しく行う方法は? Stackoverflowに関するいくつかの同様の質問: (前に質問)親プロセスが終了したときに、子プロセスを終了させるにはどうすればよいですか? (後で尋ねます)fork()で作成された子プロセスは、親が強制終了されたときに自動的に強制終了されますか? Windowsの stackoverflowに関する同様の質問: Windowsで子プロセスを自動的に破棄するにはどうすればよいですか? 親プロセスが強制終了されたときに子プロセスを強制終了します
209 c  linux  unix  process  fork 

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