【发布时间】:2020-06-01 23:42:21
【问题描述】:
我有三个文件: main.c
#include <stdio.h>
#include "file3.h"
#define PERMISSION
int main()
{
#ifdef PERMISSION
myfunction1();
#else
myfunction2();
#endif // PERMISSION
return 0;
}
file2.c
#include <stdio.h>
#include "file3.h"
#ifdef PERMISSION
void myfunction1()
{
printf("Inside myfunction1 on file2.c \n");
}
#else
void myfunction2()
{
printf("Inside myfunction2 on file2.c \n");
}
#endif
file3.h
#ifndef FILE3_H_INCLUDED
#define FILE3_H_INCLUDED
#ifdef PERMISSION
void myfunction1();
#else
void myfunction2();
#endif
#endif
我想通过主文件或头文件中的宏 PERMISSION 来控制 3 文件项目的编译。如果它被定义,我应该在所有三个文件上编译所有 myfunction1 部分。如果不是,则 myfunction2 部分。但是当我将它放在 main.c 或 file3.h 上时出现“#define PERMISSION”时出现错误
代码块向我显示 file2 和 file3 默认为 else 部分,因此他们没有看到 PERMISSION 定义。我不想把它放在所有文件上并在我不想定义它时修改所有文件 现在由于对 myfunction1 的未定义引用而出错 也许我不应该将#ifdef 放在头文件file3.h 中,但它无论如何都不起作用。
我怎样才能做到正确?
【问题讨论】:
-
在 file3.h 中定义它最有意义,因为 file2.c 和 main.c 都包含它
-
您还缺少 file3.h 中的最终
#endif以关闭#include守卫。这可能会体现在您的问题中 -
谢谢,这是复制/粘贴错误
-
啊,错字。在 file3.h 中你有
#ifdef PERMISION.. 你在 file3.h 中缺少一个 S.#define PERMISSION将在修复后工作。 -
对不起,粘贴后我正在编辑它。我拼错了,但符合 IDE
标签: c c-preprocessor