1. 程式人生 > >關於 error: each undeclared identifier is reported only once for each function it appears in

關於 error: each undeclared identifier is reported only once for each function it appears in

有問題加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 的內容就知道了。

在這裡插入圖片描述