私の C アプリケーションには、次のようなロギング メソッドがあります。
void logError(const char* module, const char* message, ... );
このメソッドが呼び出されると、呼び出し元は次のようなことを行うことがよくあります。
logError("foo", "bar");
// or even
#define FOOMODULE "foo"
logError(FOOMODULE, "bar");
char*
モジュールがどのように渡されchar*
ても、アプリケーション バイナリに格納される静的メモリです。
私の質問は、コンパイラ/リンカーは、静的に宣言された文字列のすべてのインスタンスを単一の宣言に折りたたむのですか? そのため、静的に宣言された文字列のポインター ( ) を比較すると、"foo" == FOOMODULE
常に期待どおりに機能すると仮定することは有効ですか (もちろん、文字列が上記の例のように同等であり、両方がアプリの実際に静的に割り当てられていると仮定します)バイナリ)?
受信したログ メッセージをフィルタリングする方法に取り組んでいます。たとえば、単一の「モジュール」からのログ メッセージのみを表示したい場合があります。特定のログ メッセージを実際に出力するかどうかを決定する際に、文字列内の各バイトではなくポインターを比較するとよいでしょう。
ありがとう!