關於 error: each undeclared identifier is reported only once for each function it appears in
阿新 • • 發佈:2018-12-22
有問題加qq 2410474020 互相交流
這個問題其實是一個關於標頭檔案的問題
在我們寫程式的時候,經常會遇到標頭檔案沒有加帶來的警告
但是這種警告很容易解決
例如
這裡的警告說函式衝突,未宣告( incompatible implicit declaration)
遇到這個提示我們加標頭檔案
我們man一下查一下函式手冊,發現警告的exit要加標頭檔案
#include <stdlib.h>
加上之後編譯就沒有問題了
但是有些時候有些標頭檔案沒有加問題要嚴重得多
例如以下
附上原始碼(程序練習的收屍程式)
#include <stdio.h> #include <sys/types.h> #include <sys/wait.h> #include <stdlib.h> #include <unistd.h> //#include <stdbool.h> int main(void) { //first must write fork() function pid_t pid=fork(); char* msg=NULL; int n; //judge the process switch(pid) { case -1:exit(0); case 0:msg="child process\n";n=1;exit(3);break; default:msg="father process\n";n=3;exit(4);break; } int i; for(i=0;i<n;i++) { printf("%s\n",msg); sleep(2); } if(pid>0) { pid_t child_pid; int child_stat; child_pid=wait(&child_stat); if(WIFEXITED((child_stat) == true)) { printf("erzi quit success\n child quit with %d\n",WEXITSTATUS(child_stat)); } printf("shoushi PID = %d\n",child_pid); } if (pid==0) exit (5); exit(1); }
這個時候編譯得到
問題的解決是要加標頭檔案
#include<stdbool.h>
bool 是C++中的關鍵字,C中不支援
所以C99標準中引入了標頭檔案 stdbool.h,包含了四個用於布林型的預定義巨集
#define true 1
#define false 0
#define bool _Bool
typdef int _Bool
看看 stdbool.h 的內容就知道了。