3

このプログラムは、次のエラーを生成します。

case ラベルが整数定数にならない |

関数本体の内部でも明示的に宣言された定数third_cond、割り当てられた初期化子が定数と見なされない理由を理解できません。同時に'd識別子は定数と見なされます。の代わりに、または単にとして。この質問が重複していない限り、その理由を説明してください。確認しましたが、答えが見つかりませんでした。3case 3#definesecond_value3third_cond#define third_cond3

#include<stdio.h>
#define second_cond 2

int main()
{
   const int third_cond=3;
   int choice;
   printf("Enter your choice\n");
   scanf("%d",&choice);

   switch(choice)
   {
       case 1:
       printf("Beggar");
       break;
       case second_cond:
       printf("Mugger");
       break;
       case third_cond:
       printf("Lugger");
       break;
       default:
       printf("Bugger");
   }
}
4

2 に答える 2

9

Cconstでは、定数ではなく読み取り専用を意味します。const修飾変数は決して定数ではなく、定数式が必要な場所では使用できません。

定数は実定数enumであるため、case定数式に定数を使用することもできます。enum

于 2013-04-26T12:13:54.073 に答える
1

定数は文字通り値です: "string constant", 1L, 0.5, 0xAF, ...

enum独自の定数を次のように定義できます。

enum
{
    MY_CONSTANT_1,
    MY_CONSTANT_2,
    /* ... */
}

(so, , , , ...)switch-caseにキャストできる定数の待機。intenumintlong

A#defineはマクロを宣言するため、コンパイル時に定数である にsecond_cond置き換えられます。2

ただしthird_cond、変数、読み取り専用変数のままであるため (理由によりconst)、その値が同じままであるという保証はありません (const関連するメモリではなく、識別子のみを読み取り専用としてマークする存在があっても)。 .

于 2013-04-26T12:25:44.160 に答える