繁体   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