C 定义一个在范围外使用的变量
我试图通过修改一段代码来提供帮助,但我担心我犯了“定义变量时,只能在定义的范围内使用它”的错误 试图通过文本字符串实现语言更改,而不是复制代码。所以我想从字面上说C 定义一个在范围外使用的变量,c,C,我试图通过修改一段代码来提供帮助,但我担心我犯了“定义变量时,只能在定义的范围内使用它”的错误 试图通过文本字符串实现语言更改,而不是复制代码。所以我想从字面上说 if (language == 0) { static const XCHAR text1[] = ("HELLO"); } else { static const XCHAR text1[] = ("BONJOUR"); } 然后才能在代码中使用 StCreate ( ID_ST31, 20, 82, 780, 500,
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?请告诉我缺少一些明显的内容。您需要知道是否确实希望声明是静态的。如果项目只有一个文件,则可以将该文件中的所有内容声明为静态,但如果希望文件之间的可见性,则不能将变量声明为静态并使其已知,否则其他文件将无法看到该变量 您可以使用带有三元运算符的指针:
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",
"ПРИВЕТ",
...
};
你基本上想要这个:
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
);
但这方面仍有很大的改进空间。您的程序中可能有多个文本,您也可能有两种以上的语言。是的,但有一个
静态
,具有重要意义,不是吗?您想做什么?为什么不从一开始就正确地执行这些操作呢?为什么它不能只是一个指向在更高范围内定义并由分支初始化的const char
指针的指针呢?常量数组给了你什么?这最终会成为维护的噩梦。使用全局数组和访问函数从索引(参数)/语言(变量)返回字符串。这不会提供答案,它属于OP的注释。