使用C中的宏来更改其他C文件中的行为

时间:2012-09-20 18:43:19

标签: c macros

是否可以在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 个答案:

答案 0 :(得分:2)

使用全局变量或使用回调。 “最佳”解决方案取决于您需要多少灵活性。

答案 1 :(得分:1)

正如其他人所说,你不能这样做。

您的选择:
1.不要使用宏。一般来说,这是一个很好的建议。有些东西在没有宏的情况下无法完成,但通常你看不到它们。没有宏,你会得到更好的代码 2.在头文件中定义宏,该文件包含在两个C文件中。

答案 2 :(得分:1)

它不像你描述的那样工作。

#define ABC仅在ABC文件的范围内定义b.c,并且不会影响其他文件(除非b.c#include d)。< / p>

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

答案 3 :(得分:0)

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