2012-09-20 32 views
0

是否可以在C文件中定義宏,然後使用此定義更改另一個C文件的行爲?在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的行爲,它也應該能夠覆蓋那裏的行爲。

是否有可以實現此目的的宏的替代方法?

回答

2

使用全局變量或使用回調。 「最佳」解決方案取決於您需要多大的靈活性。

+0

感謝。我使用了變量和回調的組合,並能夠做我想要的。 – Allan

0

不,這是不可能的這種方式。但是你可以指示編譯器使用命令行選項來定義符號

1

正如其他人所說,你不能這樣做。

您的選擇:
1.不要使用宏。一般來說,這是很好的建議。有些東西是沒有宏的情況下無法完成的,但通常你看不到它們。沒有宏,你會得到更好的代碼。
2.在C文件包含的頭文件中定義宏。

1

它不符合你描述的方式。

#define ABC只定義ABCb.c文件的範圍內,並且不會影響其他的文件(除非b.c#include d)。

定義a.c文件的範圍之內,而不ABC頭文件的唯一方法是使用編譯器的命令行參數來定義ABCgcc -D ABC ...