Resolving the "a label can only be part of a statement..." error

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.

svg viewer

Code

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 88. 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 77. 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

Copyright ©2025 Educative, Inc. All rights reserved