[英]how can we use the changeable variable as a switch case label
我們如何使用可變變量作為切換用例標簽。 換句話說,我定義了一個宏。 但是我需要根據條件在運行時更改此值。 我該如何實施?
示例如下
#define CONDITION (strcmp(str, "hello") == 0)
#define FOO1 (10)
#define FOO2 (20)
#define FOO ((CONDITION) ? (FOO1) : (FOO2))
char *var="hello";
int main()
{
int p = 20;
switch(p) {
case FOO:
printf("\n case FOO");
break;
case 30:
printf("\n case 30");
break;
default:
printf("\n case default");
break;
}
return(0);
}
switch
條件需要在編譯時解決。 case
值需要是編譯時常數表達式
根據您的問題,您想使用運行時條件來更改case
的值,因此這是不可能的。
實現運行時檢查的一種方法是使用if
條件。
您的宏#define CONDITION (strcmp(str, "hello") == 0)
未完成。 它不包含任何參數。
編譯器只會說str在此范圍內未定義。
無論如何,case值是常量,因此您將無法實現此條件,因為您的條件取決於運行時輸入。
重要的是要知道大多數編譯器都是通過分支表來實現這種情況的。 這僅可能是因為case值是編譯時已知的(即常量)。 編譯器將生成代碼,以將您的輸入用作該分支表的索引,以獲取特定情況下的邏輯。
tl; dr-您不能使用switch。 使用if-elseif-else代替
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.