Label只能用作语句Error的一部分

时间:2017-09-21 10:19:46

标签: c unix label labeled-statements

我一直在浏览论坛,但我没有找到适用于我的情况的这个问题的答案。我正在尝试使用'sort'(unix)进行系统调用,但是,我收到一条错误消息,“标签只能是声明的一部分而且声明不是声明。”这是导致错误的代码。

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.");
}

在系统调用中,我尝试按字母顺序对文件进行排序,以便按名称简单地收集条件。

我是如此傻眼,因为这个错误发生在char * const中,其中包含我的execv系统调用的命令。此 EXACT 开关语句适用于不同的程序文件。有人能发现我失踪的东西吗? 感谢

2 个答案:

答案 0 :(得分:17)

在C中(与C ++相反)声明不是语句。标签可以仅在声明之前。您可以编写例如在标签

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

或者您可以将代码括在大括号中

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

考虑到在第一种情况下变量的范围是switch语句,而在第二种情况下,变量的范围是标签下的内部代码块。该变量具有自动存储持续时间。因此退出相应的代码块后它将不会存在。

答案 1 :(得分:0)

在标签下面定义一个变量时,你应该告诉变量的范围(使用大括号)。

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.");
}