c - 宏作为 C 字符数组中的值

标签 c macros

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

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

但我收到此错误:

error: initializer element is not constant

我认为编译器无法解析该宏。 有办法让它工作吗?

最佳答案

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

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

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

关于c - 宏作为 C 字符数组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14979572/

相关文章:

c - 为什么我的十六进制转换功能差了一个?

c - 如何将结构成员数组传递给C中的函数

objective-c - 如何在 Objective-C 宏中使用商业标志?

function - 将java方法名称作为clojure中的函数arg

c - 使用哪种加密方法?

c - (int*) calloc 和 just calloc 之间的区别?

c - 带参数的通用多行宏

python - 如何从 python 运行 MS Access 宏

c - 拒绝指针的数组大小的宏

C++ #define可变参数函数