我的导师发布了这个程序来给出信号的示例,我尝试编译它,但收到三个警告:
Buzzoff.c:17:5: warning: implicit declaration of function 'alarm' is invalid in
C99 [-Wimplicit-function-declaration]
alarm(2);
^
Buzzoff.c:21:5: warning: implicitly declaring library function 'exit' with type
'void (int) __attribute__((noreturn))'
exit(-1);
^
Buzzoff.c:21:5: note: please include the header <stdlib.h> or explicitly provide
a declaration for 'exit'
Buzzoff.c:33:5: warning: implicit declaration of function 'pause' is invalid in
C99 [-Wimplicit-function-declaration]
pause();
^
3 warnings generated.
Run Code Online (Sandbox Code Playgroud)
我仍然不明白信号是如何工作的,并且似乎无法弄清楚这个程序到底出了什么问题。有人可以帮助我了解出了什么问题以及如何解决它吗?
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
void handler(int s)
{
printf("Please wake up 1730 !!!!!!! \n");
}
int cnt = 0;
void boom(int s)
{
if (cnt<5) {
printf("tick\n");
cnt = cnt+1;
alarm(2);
}
else {
printf("Boom!\n");
exit(-1);
}
}
int main()
{
signal(SIGINT, handler);
signal(SIGALRM, boom);
alarm(5);
while(1) {
printf("...ZZZZzzzzz...\n");
pause();
}
}
Run Code Online (Sandbox Code Playgroud)
signal除了它已被弃用并且是其替代品这一事实之外sigaction,代码没有任何问题。唯一的问题是,有些文件应该包含在内,但它们没有包含在内,这就是编译器试图告诉您的内容。
但是,代码包含正确的头文件!alarm和pause被定义在unistd.h和exit中被定义stdlib.h,两者都被包括在内。如果您的编译器抱怨这些文件,则编译器或标准库的安装有问题。
可能的问题可能是糟糕的操作系统(例如 Windows)、错误的安装(由疯狂的 Linux 发行版造成)或您自己做错的事情,例如移动了一些您不应该拥有的文件。不理解alarm和pause提示非 POSIX 操作系统,例如 Windows。然而,不理解exit暗示编译器本身存在严重问题。
您还可以发布您执行的编译代码的命令吗?由于某种原因你没有碰巧包括在内-nostdinc,是吗?