簡體   English   中英

宏作為C char數組中的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM