条件编译三文件项目

时间:2020-06-01 23:42:21

标签: c c-preprocessor

我有三个文件: 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中,但是仍然无法正常工作。

如何正确处理?

2 个答案:

答案 0 :(得分:0)

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

  • 分别位于每个文件中

    将其放入通用标头

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

答案 1 :(得分:0)

将其添加到您的编译器命令行中

 > 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

在“项目”->“构建”选项下尝试,在“编译器设置”标签内选择#defines标签