0

我需要用宏初始化一个 char 数组作为它的值。我试过这样做:

    char    text[][255] = {
     "",
    /*  1 */        MACRO_("Foobar","Some text to translate"),
    /*  2 */        MACRO_("Foobar","Some more text to translate"),
//...
};

但我得到这个错误:

错误:初始化元素不是常量

我认为编译器无法解析宏。有没有办法使这项工作?

4

2 回答 2

2

它更有可能MACRO()扩展到一些非常量的东西,例如用于查找翻译的函数调用。至少在这种情况下通常会这样做。

使用GNU gettext,它也使用宏来标记和查找要翻译的字符串,您可以在此类情况下使用单独的仅标记宏(通常称为),然后在使用之前N_()将字符串传递给运行时宏。_()

您不能使用需要函数调用才能计算的数据来初始化数组,它必须是常量数据。

于 2013-02-20T12:14:10.393 回答
0

> 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_执行的操作以及传入的内容,您可能可以在循环中执行此操作,这将节省您的一些写作时间,但这将解决您的问题。

于 2013-02-20T12:35:33.870 回答