定义一个在范围之外使用的变量

时间:2016-04-25 13:48:18

标签: c

我试图通过修改一段代码来帮助我,并且我担心我会违反"当您定义变量时,您只能在定义的范围内使用它。"

尝试通过文本字符串实现语言更改,而不是复制代码。所以我想真的能说......

if (language == 0)
{
static const XCHAR text1[] = ("HELLO");
} else {
static const XCHAR text1[] = ("BONJOUR");
}

然后能够在代码中使用...

StCreate
(
ID_ST31,
 20,
 82,
 780,
 500,
 ST_DRAW,
 text1,
 alt3Scheme
);

从我在这里读到的,上面的代码只会初始化{}中的文本字段?我需要在外面将变量设置为NULL吗?请告诉我,我遗漏了一些明显的东西。

3 个答案:

答案 0 :(得分:3)

您可以使用带三元运算符的指针:

const char* text1 = (language == 0) ? "HELLO" : "BONJOUR";

一般来说,这些问题可以通过指针解决,如:

const struct my_struct* actual_data;
if (cond) {
    static const struct my_struct data = {...};
    actual_data = data;
} else {
    static const struct my_struct data = {...};
    actual_data = data;
}

但是,如果你不需要修改它们,我个人认为在这种微不足道的情况下使用数组用于字符串是没有意义的。

  

我是否需要将变量设置为NULL?

这不是必要的,但通常被视为良好做法。

对于您的特定情况,有一个非常简单且相对可扩展的本地化方法 - 使用数组:

static const char* const text1[LANGUAGE_COUNT] = {
    "HELLO",
    "BONJOUR",
    "ПРИВЕТ",
    ...
};

答案 1 :(得分:0)

你基本上想要这个:

static const XCHAR *text1_ENG = "HELLO";
static const XCHAR *text1_FRA = "BONJOUR";

char *GetText1()
{
   if (language == 0)
     return text1_ENG;
   else
     return text1_FRA;
}
...
StCreate
(
ID_ST31,
 20,
 82,
 780,
 500,
 ST_DRAW,
 GetText1(),
 alt3Scheme
);

但这里仍有很大的改进空间。您的程序中可能只有一个文本,也可能有两种以上的语言。

答案 2 :(得分:-1)

您需要知道您是否真的希望声明为static。如果您的项目只有一个文件,则可以在该文件中声明所有内容,但是如果您希望文件之间的可见性,您不能将变量声明为静态并使其已知,则从其他文件中看不到它。