2014-04-25 39 views
1

我有兩個C文件,一個調用main.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 

這是​​文件的標題:

#include "main.c" 

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

我明白任何及所有的幫助。

+1

我不明白你想達到什麼目的。一個C文件(幾乎)不會包含另一個C文件。它們都被編譯爲一個目標文件,目標文件被鏈接到可執行文件。 –

回答

1

在另一個.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