GCC編譯遇到“a label can only be part of a statement and a declaration is not a statement”問題

Uiney發表於2024-05-25
  • 問題原因:switch中case裡面的區域性變數出錯
  • 解決方法:將case裡面定義的區域性變數在switch外面定義。
//報錯情況
        switch (fork()) {
        case -1:
            error(1, errno, "fork");
        case 0:
            // 子程序執行命令
            if (execvp(args[0], args) == -1) { 
                error(1, errno, "execvp");
            }
        default:
            // 父程序等待子程序結束
            int wstatus;
            pid_t pid = wait(&wstatus);
            printf("\n%d terminated. ", pid);
            print_wstatus(wstatus);
        }
//解決方案
int wstatus;
        pid_t pid;
        switch(fork()){
        case -1:
            error(1,errno,"fork");

        case 0:
            if(execvp(args[0],args) == -1){
                error(1,errno,"execvp");
            }
           // exit(1);
        default:

            pid = wait(&wstatus);
            if(pid > 0){
                printf("\nchildpid:%d ",pid);
                print_wstatus(wstatus);
            }
         }

相關文章