Label can only be used as part of a statement Error

与世无争的帅哥 提交于 2020-12-02 06:42:24

问题


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


回答1:


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.




回答2:


When define a variable below a label, you shall tell the scope of the variable(using brace).

int processid;
switch(processid = fork())
{                 //establishing switch statement for forking of processes.
    case -1:
        perror("fork()");
        exit(0);
        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.");
}


来源:https://stackoverflow.com/questions/46341364/label-can-only-be-used-as-part-of-a-statement-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!