සියලු පිළිතුරු සහ තවත් පර්යේෂණ කිහිපයක් කියවීමෙන් පසු මට කරුණු කිහිපයක් ලැබේ.
Case statements are only 'labels'
C හි, පිරිවිතරයන්ට අනුව,
§6.8.1 ලේබල් කරන ලද ප්රකාශ:
labeled-statement:
identifier : statement
case constant-expression : statement
default : statement
C හි “ලේබල් කරන ලද ප්රකාශයක්” සඳහා ඉඩ දෙන කිසිදු වගන්තියක් නොමැත. එය භාෂාවේ කොටසක් පමණක් නොවේ.
නිසා
case 1: int x=10;
printf(" x is %d",x);
break;
මෙය සම්පාදනය නොකරනු ඇත , http://codepad.org/YiyLQTYw බලන්න . GCC දෝෂයක් ලබා දෙයි:
label can only be a part of statement and declaration is not a statement
පවා
case 1: int x;
x=10;
printf(" x is %d",x);
break;
මේ ද සම්පාදනය නොවේ , බලන්න http://codepad.org/BXnRD3bu . මෙන්න මමත් එම දෝෂය ලබා ගනිමි.
C ++ හි, පිරිවිතරයන්ට අනුව,
ලේබල්-ප්රකාශනයට අවසර ඇත, නමුත් ලේබල් කරන ලද-ආරම්භකකරණයට අවසර නැත.
Http://codepad.org/ZmQ0IyDG බලන්න .
එවැනි තත්වයකට විසඳුම දෙකකි
විෂය පථය using using භාවිතා කරමින් නව විෂය පථයක් භාවිතා කරන්න
case 1:
{
int x=10;
printf(" x is %d", x);
}
break;
නැතහොත් ලේබලය සමඟ ව්යාජ ප්රකාශය භාවිතා කරන්න
case 1: ;
int x=10;
printf(" x is %d",x);
break;
ස්විචයට පෙර විචල්යය ප්රකාශ කරන්න () එය ඔබගේ අවශ්යතාවය සපුරාලන්නේ නම් එය විවිධ අගයන් සමඟ ආරම්භ කරන්න
main()
{
int x; // Declare before
switch(a)
{
case 1: x=10;
break;
case 2: x=20;
break;
}
}
ස්විච් ප්රකාශය සමඟ තවත් දේවල්
කිසිදු ලේබලයක කොටසක් නොවන ස්විචයේ කිසි විටෙකත් ප්රකාශ ලියන්න එපා, මන්ද ඒවා කිසි විටෙකත් ක්රියාත්මක නොවනු ඇත:
switch(a)
{
printf("This will never print"); // This will never executed
case 1:
printf(" 1");
break;
default:
break;
}
Http://codepad.org/PA1quYX3 බලන්න .