Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
                        
                        3年前关闭。
                                                                                            
                
        
我试图通过修改一段代码来提供帮助,但恐怕我会冒犯“当您定义变量时,您只能在定义的范围内使用它”。

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

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",
    "ПРИВЕТ",
    ...
};

关于c - 定义在范围之外使用的变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36842501/

10-10 21:54
查看更多