Trusted answers to developer questions
Trusted Answers to Developer Questions

Related Tags

resolving
label
statement
c
error

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

## 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 $8$. 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 $7$. 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;
}
}

RELATED TAGS

resolving
label
statement
c
error