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");
}

这些文件一起编译。b.c我想影响ABC 的定义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 ABC只定义文件ABC范围内b.c,不影响其他文件(除非b.c#included)。

在没有头文件的文件ABC范围内定义的唯一方法是使用编译器的命令行参数进行定义:a.cABCgcc -D ABC ...

于 2012-09-20T18:49:01.163 回答
0

不,这是不可能的。但是您可以指示编译器使用命令行选项定义符号

于 2012-09-20T18:45:18.883 回答