簡體   English   中英

我們如何使用可變變量作為切換用例標簽

[英]how can we use the changeable variable as a switch case label

我們如何使用可變變量作為切換用例標簽。 換句話說,我定義了一個宏。 但是我需要根據條件在運行時更改此值。 我該如何實施?

示例如下

在這里,案例“ FOO”會起作用嗎?

#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM