Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Label can only be used as part of a statement Error

I have been looking through the forums but I have not found an answer to this question that applies to my situation. I am trying to make a system call to using 'sort' (unix), however, I receive an error saying, "a label can only be part of a statement and a declaration is not a statement." Here is the code causing the error.

int processid;  
switch(processid = fork()){                 //establishing switch statement for forking of processes.
case -1:
    perror("fork()");
    exit(EXIT_FAILURE);
    break;
case 0:
    char *const parmList[] = {"usr/bin/sort","output.txt","-o","output.txt",NULL};  //execv call to sort file for names.
    break;
default:
    sleep(1);
    printf("\nChild process has finished.");
}

In the system call I am trying to sort a file in alphabetical order to simply gather like terms by name.

I am so dumbfounded as the error for this occurs at a char * const of which contains the commands for my execv system call. This EXACT switch statement works on a different program file. Can someone spot what I am missing? Thanks

like image 519
BologneseBandit Avatar asked Sep 21 '17 10:09

BologneseBandit


1 Answers

In C (opposite to C++) declarations are not statements. Labels may precede only statements. You can write for example inserting a null statement after the label

case 0:
    ;
    char *const parmList[] = {"usr/bin/sort","output.txt","-o","output.txt",NULL};  //execv call to sort file for names.
    break;

Or you can enclose the code in braces

case 0:
    {
    char *const parmList[] = {"usr/bin/sort","output.txt","-o","output.txt",NULL};  //execv call to sort file for names.
    break;
    }

Take into account that in the first case the scope of the variable is the switch statement while in the second case the scope of the variable is the inner code block under the label. The variable has automatic storage duration. So it will not be alive after exiting the corresponding code blocks.

like image 50
Vlad from Moscow Avatar answered Oct 14 '22 21:10

Vlad from Moscow