我有两个不同的头文件,它们都有相同的宏,代表一些方程式。例如;我在 function1.h 和 function2.h 中都有 F1,但这两个代表两个不同的方程式。在某些情况下,我需要使用 function1.h 中的 F1,而在其他一些情况下,我需要使用 function2.h 中的 F1。我怎么可能在 C 中实现这个逻辑。
//function1.h
#define F1 x+10
#define F2 x*10
//function2.h
#define F1 x+210
#define F2 x*99
//main.c
#include "function1.h"
#include "function2.h"
int x = 10;
if(..something..)
return(F1) //from function1.h
if(..something..else..)
return(F1) //from function2.h
//无论如何要毫无歧义地实现这个逻辑
最佳答案
如果他们在做不同的事情,他们应该以不同的方式命名(如果他们是您建议的不同方程式的“速记”)。预编译器操作可能会做一些您意想不到的事情。因此,例如,第二个头文件,如果与第一个头文件列在同一个源文件中,实际上可能会将 F1 替换为第一个中相同宏名称的别名代码。不过,这可能会给您带来编译错误。
请记住,预编译器只是将宏标签替换为被宏标签“别名化”的代码。这就是编译后的源代码。您可能知道这一点,但有些人认为宏是某种类型的函数命名法。
#define F1 x+10
#define F2 x*10
//function2.h
#define F1 x+210
#define F2 x*99
更改为:
#define F1(A) x+A
#define F2(A) x*A
您不需要在每种情况下都使用两个不同的宏。您不应该做您当前正在做的事情 - 请参阅上一段。
使用:
return(F1(10));
或
return(F1(210));
视情况而定。
关于c - 从代表不同值的不同文件访问 C 中的相同宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39830471/