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 に答える