2017-05-03 126 views
0

我試圖創建一個bash腳本,將改變以下的值I輸入到命令行的值:如何重新定義#defined值?

#ifndef SIZE 
#define SIZE 10 
#endif 

有沒有什麼辦法可以改變大小的值?

+0

你想用'sed'改變源代碼?它與C有關嗎?你不想通過'-DSIZE = 30'來使用編譯開關來改變它嗎? –

+0

據我所知,你想在運行時將'SIZE'的值從10改爲20?如果是的話,答案是否定的。預編譯器命令(其中'#define是一個)在編譯過程的早期處理。 '#define'會發生什麼情況,即使在解析代碼之前,字符串「SIZE」的每一處出現都被替換爲10。你可以做的是有一個默認初始化爲10的變量(比如'size'),然後處理命令行參數並根據需要修改變量。 – thurizas

+0

這樣做的最好方法是將所有這些常量放在單獨的標題中,然後根據需要編輯/生成這些標題。使用GCC功能來生成預處理器常量是一個壞主意,爭取可移植性和標準C. – Lundin

回答

2

如果您在編譯程序時將-DSIZE=30傳遞給GCC,那麼SIZE將從一開始就被定義爲30。然後,由於問題中顯示的代碼檢查它是否已被定義,因此不會將其定義爲10

+0

我要求「30」值的版稅:) –

+0

謝謝!我想了解更多關於GDS的-DSIZE。 你會推薦我在Google上搜索以瞭解更多信息? – MasterGL

+0

@MasterGL它在[「控制預處理器」](https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html#Preprocessor-Options)部分。我谷歌搜索「gcc命令行」,然後使用該頁面上的索引。 – unwind