2016-04-25 56 views
-1

我試圖通過修改一段代碼來幫忙,而且我擔心我會犯「當你定義一個變量時,你只能在定義的範圍內使用它」。定義一個在範圍之外使用的變量

試圖通過文本字符串來實現語言更改,而不是重複代碼。所以我想從字面上可以說...

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嗎?請告訴我我錯過了一些明顯的東西。

+0

是的,但有一個「靜態」,並帶有重要性,不是嗎? –

+3

你想做什麼?爲什麼不從一開始就把事情做好? –

+0

爲什麼不能只是一個指向const char指針的指針,該指針在更高範圍內定義,並且由分支初始化?常量數組給你什麼? – StoryTeller

回答

-1

您需要知道您是否確實希望聲明爲static。如果您的項目只有一個文件,您可以在該文件中聲明一切爲靜態文件,但是如果您希望文件之間的可見性,則不能將變量聲明爲靜態並且知道該變量,它將不會從其他文件中看到。

+0

這不提供答案,它屬於對OP的評論。 – StoryTeller

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

您basicly想這樣的:

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 
); 

但仍然有很大的空間這裏改進。你的程序中可能有更多的文本,並且你也可能有兩種以上的語言。