是否可以在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
的行为,它也应该能够覆盖那里的行为。
是否有可以实现此目的的宏替代?
答案 0 :(得分:2)
使用全局变量或使用回调。 “最佳”解决方案取决于您需要多少灵活性。
答案 1 :(得分:1)
正如其他人所说,你不能这样做。
您的选择:
1.不要使用宏。一般来说,这是一个很好的建议。有些东西在没有宏的情况下无法完成,但通常你看不到它们。没有宏,你会得到更好的代码
2.在头文件中定义宏,该文件包含在两个C文件中。
答案 2 :(得分:1)
它不像你描述的那样工作。
#define ABC
仅在ABC
文件的范围内定义b.c
,并且不会影响其他文件(除非b.c
为#include
d)。< / p>
在没有头文件的ABC
文件范围内定义a.c
的唯一方法是使用编译器的命令行参数定义ABC
:gcc -D ABC ...
答案 3 :(得分:0)
这不可能是不可能的。但是您可以指示编译器使用命令行选项定义符号