假設我有一個定義MC_SERVER1,MC_SERVER2,MC_SERVER3的列表,我將如何循環以獲取每個的內容。我也不知道我會有多少人。我可能有3個或10.這是C語言編程循環直通定義
說我有 DEFINE MC_SERVER1 = 「mc1.sdsds.com」 DEFINE MC_SERVER2 = 「mc2.sdsds.com」
我該怎麼辦環通商場。
假設我有一個定義MC_SERVER1,MC_SERVER2,MC_SERVER3的列表,我將如何循環以獲取每個的內容。我也不知道我會有多少人。我可能有3個或10.這是C語言編程循環直通定義
說我有 DEFINE MC_SERVER1 = 「mc1.sdsds.com」 DEFINE MC_SERVER2 = 「mc2.sdsds.com」
我該怎麼辦環通商場。
定義不這樣工作。它們在編譯時進行評估,而不是執行時間,因此它們的實例將被替換爲它們的值。
'#define GETCONFIGVALUE(key,sect,var)\ config_get_value(key,sect,var); \ if(strlen(var)> 0)\ TRACE(TRACE_DEBUG,「key」#key「section」#sect「var」#var「value [%s]」,var) ' – 2012-03-30 04:31:44
這就是我在源代碼中查看,所以它讓我相信這些是來自配置文件的值 – 2012-03-30 04:32:41
@Craig Sparks:'#key'被稱爲字符串化(http://gcc.gnu.org/onlinedocs/cpp/Stringification.html #Stringification)。除非你確信自己知道自己在做什麼,否則你應該避開它。 – vsz 2012-03-30 04:34:22
有可能通過串聯技術(##
)和字符串化(#
)獲得與宏相似的效果,但對於不使用宏可能會更好。
查看Variable names in C的例子。
如果它們在一個數組中,但不是隻有一個定義列表,就可以這樣做。
如:
const char *servers[] = {
"server.one",
"server.two",
};
如果你有興趣在這種方法中,也看到how to get the length of an array at compile time
簡短的回答:你不知道。你想解決什麼問題? – Mysticial 2012-03-30 04:19:24
定義「內容」。你的宏是什麼?常量?表達式?請更詳細地解釋你打算完成什麼。 – vsz 2012-03-30 04:22:14
我想他的意思是''for(i = 0; i
iehrlich
2012-03-30 04:27:55