[英]Macros as values in C char array
我需要用宏來初始化一個char數組作為它的值。 我試過這樣做:
char text[][255] = {
"",
/* 1 */ MACRO_("Foobar","Some text to translate"),
/* 2 */ MACRO_("Foobar","Some more text to translate"),
//...
};
但我得到這個錯誤:
錯誤:初始化元素不是常量
我認為編譯器無法解析宏。 有沒有辦法讓這項工作?
MACRO()
更有可能擴展為非常量的東西,例如查找翻譯的函數調用。 這至少是在那些情況下通常所做的事情。
使用GNU gettext ,它也使用宏來標記和查找翻譯的上行字符串,在這些情況下使用單獨的僅標記宏(通常稱為N_()
),然后將字符串傳遞給運行時宏_()
在使用它之前。
您不能使用需要函數調用的數據初始化數組才能進行計算,它必須是常量數據。
> MACRO_ calls a function which translates the text. It's not my solution but I have to work with it
事實是,你不能在編譯時使用來自MACRO_
數據初始化你的數組,因為它調用了一個函數。 然而,一切都不會丟失。 您可以在運行時執行此操作
例如:
#define MACRO_ ...//whatever it does
int main()
{
char text[10][255] = {0}; // you'll have to set that first value
strcpy(text[0], MACRO_("Foobar","Some text to translate"));
strcpy(text[1], MACRO_("Foobar","Some more text to translate"));
...
根據您的代碼, MACRO_
作用以及您傳入的內容,您可以在循環中執行此操作,這將為您節省一些寫入,但這將解決您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.