The “a label can only be part of a statement and a declaration is not a statement” error occurs in C when it encounters a declaration immediately after a label.
The C language standard only allows statements to follow a label. The language does not group declarations in the same category as statements.
Consider the following code snippet that throws this error:
#include<stdio.h>int main() {char * str1 = "hello";goto Here;Here:char * str2 = " world";printf("%s %s", str1, str2);return 0;}
Note how str2
is declared immediately after the Here:
label on line . The solution to this error is to add a semi-colon after the label. The compiler will translate it as a blank statement and not throw the error. The following code snippet implements this fix:
#include<stdio.h>int main() {char * str1 = "hello";goto Here;Here: ; // semi-colon added after the label.char * str2 = " world";printf("%s %s", str1, str2);return 0;}
The error can also occur when using switch statements in C, as the language treats cases similar to labels. Consider the following error scenario:
#include<stdio.h>int main() {char option = 'a';switch (option){case 'a':char * str = "Case 'a' hit.";printf("%s", str);break;}}
The solution is the same as before; a semi-colon needs to be added after the case 'a'
statement on line . Alternatively, the entire case can be enclosed in curly braces to circumvent the error. The following code snippet implements both ways of fixing this error:
#include<stdio.h>int main() {char option = 'a';switch (option){case 'a': ;char * str = "Case 'a' hit.";printf("%s", str);break;}}
Free Resources