c - 从代表不同值的不同文件访问 C 中的相同宏

标签 c file macros header embedded

我有两个不同的头文件,它们都有相同的宏,代表一些方程式。例如;我在 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/

相关文章:

c++ - 为测试创建多个相似标识符的宏

字符串文字开始迭代器和结束迭代器的 C++ 宏

mysql - 搜索非常大的彩虹表文件

c - 合并排序不起作用

c - 在不使用任何库(如 cuda 或 opencl)的情况下对 gpu 进行编程?

windows - Linux 与 Windows 中的文件权限

c - 类函数宏与宏

c - 输出是如何变成 '10' 的?

c - 为什么 ftell 会跳过文件中的某些位置?

c - 当 POSIX 说 stderr 应该可以读写时是什么意思?