2012-06-15 19 views
0

我想知道如果一個條件操作符實際上可以防止其他無關的代碼工作。例如低於:可以使用條件操作和花括號來影響代碼嗎?

typedef char WCHAR_T; 
#define STRLEN(x) strlen(x) 
if (argc > 2) 
{ 
    WCHAR *pFileName = argv[1]; 
    basic_string <WCHAR> strFileName(pFileName, STRLEN(pFileName)); 
} 

在上面的代碼,pFileName,argv的[1]和strFileName無關與比較argc > 2。假設命令行參數非常好。但是,該代碼不適用於該比較。此外,即使我將代碼更改爲以下格式:

typedef char WCHAR_T; 
#define STRLEN(x) strlen(x) 

{ 
    WCHAR *pFileName = argv[1]; 
    basic_string <WCHAR> strFileName(pFileName, STRLEN(pFileName)); 
} 

仍然不起作用。 編輯:「不工作」,我的意思是編譯器給出的錯誤信息,如「strFileName」沒有聲明,這意味着這個聲明根本沒有運行。

我不知道爲什麼大括號會在代碼中產生如此大的影響。當我擺脫大括號時,代碼就像魔術一樣......任何人都可以解釋這一點嗎?謝謝。

+1

究竟你「不工作」是什麼意思? – MRAB

+0

請參閱我編輯的問題,謝謝。 –

回答

1

我想你會嘗試從大括號外的某處使用變量strFileName,這是不可能的。

{}大括號定義了一個塊,其中聲明的變量只存在於該塊內。 一個解決辦法是宣佈strFileName外塊,並分配它從裏面的值

typedef char WCHAR_T; 
#define STRLEN(x) strlen(x) 

basic_string <WCHAR> strFileName; 

if (argc > 2) 
{ 
    WCHAR *pFileName = argv[1]; 
    strFileName.assign(pFileName, STRLEN(pFileName)); 
} 

std::cout << strFileName << std::endl; // should work now 
+0

您的解釋和示例非常有用,謝謝。 –

6

因爲strFileName只存在於大括號內。大括號定義了範圍,局部變量只在它們定義的範圍內是已知的。

0

我看到了WCHAR_T的定義,但是代碼中使用的是WCHAR。 WCHAR是否在任何地方定義?