0

C ファイルでマクロを定義し、この定義を使用して別の C ファイルの動作を変更することはできますか?

たとえば、次の名前のファイルがあるとしますb.c

#include <stdio.h>
#define ABC

void function() {
    printf("b.c\n");
}

そして、次の名前の別のファイルa.c

#include <stdio.h>

int main() {
    #ifdef ABC
        printf("b.c defined this\n");
    #endif
    printf("a.c\n");
}

これらのファイルは一緒にコンパイルされます。ABC in の定義がb.cに影響を与えることを望んでいますa.c

ヘッダー ファイルを使用することになっていたことはわかっていますが、そうしたくありません。これを達成する別の方法はありますか?

私のシナリオでb.cは、 は の動作を補完する一種のサブアプリケーションでa.cあり、そこで動作をオーバーライドすることもできるはずです。

これを達成できるマクロに代わるものはありますか?

4

4 に答える 4

2

グローバル変数を使用するか、コールバックを使用してください。「最適な」ソリューションは、必要な柔軟性によって異なります。

于 2012-09-20T18:44:22.440 に答える
1

他の人が言ったように、あなたはそれをすることはできません。

選択肢:
1. マクロを使用しない。一般的に、それは良いアドバイスです。マクロがないとできないこともありますが、通常はそれらは表示されません。マクロを使用しないと、より優れたコードが得られます。
2. 両方の C ファイルに含まれるヘッダー ファイルでマクロを定義します。

于 2012-09-20T18:47:31.253 に答える
1

あなたが説明したようには機能しません。

#define ABCABCファイルのスコープ内でのみ定義し、b.c他のファイルに影響を与えません ( db.cでない限り)。#include

ヘッダー ファイルなしABCで file のスコープ内で定義する唯一の方法は、コンパイラのコマンド ライン引数を使用して定義することです。a.cABCgcc -D ABC ...

于 2012-09-20T18:49:01.163 に答える
0

いいえ、これはこの方法では不可能です。ただし、コマンド ライン オプションを使用してシンボルを定義するようにコンパイラに指示することはできます。

于 2012-09-20T18:45:18.883 に答える