【问题标题】:conditional compiling three-file project条件编译三文件项目
【发布时间】: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


【解决方案1】:

您需要在所有文件中#define PERMISSION。要么

  • 明确的地方在每个文件中

    把它放在一个共同的标题中

    在编译器中传递它 -DPERMISSIONS(如果你的编译器允许它)

【讨论】:

  • 如果我明确地把它放在每个文件中,我是否必须在每个文件中包含它的保护?我以为通过在其中任何一个中定义它,它们对所有人都是可见的,为什么他们看不到呢?
  • #defines 非常原始,文件的文本被修改了。不,你不需要守卫
【解决方案2】:

将它添加到你的编译器命令行中就可以了

 > I am using Codeblocks. I haven't been able to find the way to pass compiling options to it like in the command line – juan carlos vega oliver 3 hours ago

在 Project -> Build options 下尝试,在选项卡 Compiler settings 中选择选项卡 #defines

【讨论】:

  • 我正在使用代码块。我一直找不到像在命令行中那样将编译选项传递给它的方法
猜你喜欢
  • 2016-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-18
  • 1970-01-01
  • 2012-09-17
相关资源
最近更新 更多