【发布时间】:2015-02-13 15:46:14
【问题描述】:
我收到以下错误:
program.c:24:3: error: case label does not reduce to an integer constant
case proc_id[0]: //child process 1 pid
对于以下代码中的所有 case 语句:
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
int proc_id[4];
int main(int argc, char *argv[]){
int i;
int proc=1;
for (i = 0; i < 3; ++i)
{
if(proc != 0){
proc = fork();
}
if (proc != 0)
{
proc_id[i]=proc;
}
}
switch(getpid()){
case proc_id[0]: //child process 1 pid
for (i = 0; i < l; ++i)
{
alarm(3);
kill(proc_id[1], SIGUSR1);
}
break;
case proc_id[1]: //child process 2 pid
for (i = 0; i < l; ++i)
{
alarm(6);
kill(proc_id[2], SIGUSR2);
}
break;
case proc_id[2]: //child process 3 pid
for (i = 0; i < l; ++i)
{
alarm(9);
kill(proc_id[0], SIGUSR1);
}
break;
case proc_id[3]: //parent pid
printf("parent\n");
break;
}
return(0);
}
void custom_handler(int signum){
kill(SIGINT, getppid());
printf("PID:%d \t Signal Number: %d\n", getpid(), signum);
}
void parent_handler(int signum){
++sigcount;
switch(sigcount){
case l:
kill(proc_id[0], SIGTERM);
break;
case l+3:
kill(proc_id[1], SIGTERM);
break;
case l+6:
kill(proc_id[2], SIGTERM);
kill(proc_id[3], SIGTERM);
break;
}
}
void sigterm_handler(int signum){
exit(0);
}
我有两个问题:
- 为什么会出现这个错误 和
- 我们能否将计算结果为整数的表达式作为 case 标签?
环境细节: 在 ubuntu 终端上使用 gcc 编译程序。
【问题讨论】:
标签: c gcc switch-statement