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

标签 c conditional-compilation pebble-sdk

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

这是 main.c 文件的 header :

//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 文件的 header :

#include "main.c"

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

感谢所有帮助。

最佳答案

在另一个 .cc 文件中包含一个 .cc 文件表明设计不干净。

您可以根据 BATTERY 是否已定义,有条件地编译输入/输出 main.ccbatterysaver.cc 中的部分代码还是不是。

如果这不起作用,您必须问问自己如何将通用声明放在 .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

关于c - 两个文件,使用预处理器进行条件编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23298989/

相关文章:

在c中创建结构

c - 使用 C,为什么 char * 类型在一个地方大小为 2,而在另一个地方大小为 4?

c++ - "has_trivial_destructor"定义而不是 "is_trivially_destructible"

asp.net-mvc-3 - Site.css 为 Debug模式,site-min.css 为 Release模式

c - 分割。 strcmp [C]

javascript - Chrome 在从 libwebsockets 接收时说 "Could not decode a text frame as UTF-8"

c++ - C++ 中的 #ifdef 1 是什么

pebble-watch - 使用 Alpha channel 在 Pebble Time 上的图层透明度

javascript - PebbleKit JavaScript 将图像发送到 Pebble

android - 如果没有配套应用程序,app_message_outbox_send() 会导致 Pebble 崩溃吗?