两个文件,使用预处理器进行条件编译

时间:2014-04-25 16:58:44

标签: c conditional-compilation pebble-sdk

我有两个C文件,一个名为main.c,另一个名为batterysaver.c。我没有将batterysaver.c中的代码包含在main.c文件中,而是使用条件编译,而是希望有两个单独的文件,但是能够设置在给定预处理程序指令的情况下编译哪个文件。这可能吗?

这是main.c文件的标题:

//standard header
#include "pebble.h"
#include "iota.h"
#define BATTERY false

//app-specific data
Window *window; //obvious window is obvious
TextLayer *time_layer; //time layer

#if !BATTERY
*REST OF FILE STARTS HERE, THEN AT THE END*
#endif

这是batterysaver.c文件的标题:

#include "main.c"

#if BATTERY
*REST OF FILE STARTS HERE, THEN AT THE END*
#endif

我感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

在另一个.cc文件中包含.cc文件表示不洁设计。

您可以根据main.cc是否已定义来有条件地编译batterysaver.ccBATTERY中的部分代码。

如果这不起作用,您必须问自己如何将常用声明放在.h文件中,并将.h文件包含在.cc文件中。

<强> my_common.h

#ifndef MY_COMMON_H
#define MY_COMMON_H

//standard header
#include "pebble.h"
#include "iota.h"
#define BATTERY false

//app-specific data
extern Window *window; //obvious window is obvious
extern TextLayer *time_layer; //time layer

#ENDIF

<强> main.cc

#include "my_common.h"

Window *window; //obvious window is obvious
TextLayer *time_layer; //time layer

#if !BATTERY
*REST OF FILE STARTS HERE, THEN AT THE END*
#endif

<强> battarysaver.cc

#include "my_common.h"

#if BATTERY
*REST OF FILE STARTS HERE, THEN AT THE END*
#endif