解決gcc編譯報(bào)錯(cuò)unknown type name ‘bool‘問題
gcc編譯報(bào)錯(cuò)unknown type name ‘bool‘
錯(cuò)誤描述
unknown type name ‘bool’
最近使用C實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)碰到了以下這個(gè)錯(cuò)誤
? ?LinkedList gcc list.c? list.c:14:1: error: unknown type name ‘bool'; did you mean ‘_Bool'? ?bool is_empty(PNODE pHead); ?^~~~ ?_Bool list.c:77:1: error: unknown type name ‘bool'; did you mean ‘_Bool'? ?bool is_empty(PNODE pHead) ?^~~~ ?_Bool list.c: In function ‘is_empty': list.c:80:9: error: ‘true' undeclared (first use in this function); did you mean ‘free'? ? return true; ? ? ? ? ?^~~~ ? ? ? ? ?free list.c:80:9: note: each undeclared identifier is reported only once for each function it appears in list.c:82:9: error: ‘false' undeclared (first use in this function); did you mean ‘fclose'? ? return false; ? ? ? ? ?^~~~~
錯(cuò)誤原因
未知的類型名:‘bool’, 因?yàn)樵贑語言標(biāo)準(zhǔn)(C89)沒有定義布爾類型,所以會(huì)報(bào)錯(cuò)。
而C99提供了一個(gè)頭文件<stdbool.h>定義了bool,true代表1,false代表0。
只要導(dǎo)入stdbool.h,就能非常方便的操作布爾類型了。
解決方法
#include <stdbool.h>
gcc和g++編譯c或者c++文件碰到的問題
gcc 和 g++ 都是 GNU (組織) 的一個(gè)編譯器。
誤區(qū)一:gcc只能編譯c代碼,g++只能編譯c++代碼
兩者都可以,但是請(qǐng)注意:
1. 后綴為.c 的,gcc 把它當(dāng)作是 C 程序,而 g++ 當(dāng)作是 c++ 程序;后綴為.cpp 的,兩者都會(huì)認(rèn)為是 c++ 程序,注意,雖然 c++ 是 c 的超集,但是兩者對(duì)語法的要求是有區(qū)別的。C++ 的語法規(guī)則更加嚴(yán)謹(jǐn)一些。
2. 編譯階段,g++ 會(huì)調(diào)用 gcc,對(duì)于 c++ 代碼,兩者是等價(jià)的,但是因?yàn)?gcc 命令不能自動(dòng)和 C++程序使用的庫聯(lián)接,所以通常用 g++ 來完成鏈接,為了統(tǒng)一起見,干脆編譯 / 鏈接統(tǒng)統(tǒng)用 g++ 了,這就給人一種錯(cuò)覺,好像 cpp 程序只能用 g++ 似的。
誤區(qū)二:gcc不會(huì)定義__cplusplus宏,而g++會(huì)
實(shí)際上,這個(gè)宏只是標(biāo)志著編譯器將會(huì)把代碼按 C 還是 C++ 語法來解釋,如上所述,如果后綴為.c,并且采用 gcc 編譯器,則該宏就是未定義的,否則,就是已定義。
誤區(qū)三:編譯只能用gcc,鏈接只能用g++
嚴(yán)格來說,這句話不算錯(cuò)誤,但是它混淆了概念,應(yīng)該這樣說:編譯可以用 gcc/g++,而鏈接可以用 g++ 或者 gcc
-lstdc++。因?yàn)?gcc 命令不能自動(dòng)和 C++程序使用的庫聯(lián)接,所以通常使用 g++ 來完成聯(lián)接。但在編譯階段,g++ 會(huì)自動(dòng)調(diào)用 gcc,二者等價(jià)。
用 gcc 編譯 c++ 文件:
#gcc -o test.exe test.cpp -lstdc++
用 GCC 編譯 c++ 文件時(shí),必須加上 - lstdc++ 的參數(shù)選項(xiàng),告訴編譯器自動(dòng)調(diào)用 g++ 編譯器來自動(dòng)鏈接 C++ 里面的庫函數(shù),否側(cè),生成的可執(zhí)行文件不能運(yùn)行成功。
問題 2
for(int i = 0; i < 100; i++) { ? ? ?............. }
使用 gcc 直接編譯報(bào)錯(cuò),因?yàn)?C99 規(guī)定,變量必須事先定義好,不能使用時(shí)再定義,但是這種定義變量的方式在 C++ 中合法
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C++發(fā)送HTTP請(qǐng)求的實(shí)現(xiàn)代碼
這篇文章主要介紹了C++發(fā)送HTTP請(qǐng)求的實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-06-06C語言sizeof與字符串處理與動(dòng)態(tài)內(nèi)存分配及main函數(shù)參數(shù)詳解
這篇文章主要介紹了C語言字符串處理函數(shù)、sizeof、動(dòng)態(tài)內(nèi)存分配函數(shù)、main函數(shù)參數(shù)問題,static在修飾變量的時(shí)候,如果是修飾全局變量,則跟全局變量功能一樣,通過示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07C++ auto自動(dòng)類型推導(dǎo)規(guī)則和使用詳解
C++11 賦予 auto 關(guān)鍵字新的含義,使用它來做自動(dòng)類型推導(dǎo)。也就是說,使用了 auto 關(guān)鍵字以后,編譯器會(huì)在編譯期間自動(dòng)推導(dǎo)出變量的類型,這樣我們就不用手動(dòng)指明變量的數(shù)據(jù)類型了2022-08-08C語言大作業(yè)之圖書管理系統(tǒng)的實(shí)現(xiàn)詳程
隨著網(wǎng)絡(luò)技術(shù)的高速發(fā)展,計(jì)算機(jī)應(yīng)用的普及,利用計(jì)算機(jī)對(duì)圖書館的日常工作進(jìn)行管理勢(shì)在必行,趁著寒假時(shí)間手把手帶你用C語言實(shí)現(xiàn)一個(gè)圖書管理系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2022-01-01C語言中((type *)0) 和(type *0)區(qū)別小結(jié)
((type *)0)?和?(type *0)?在 C 和 C++ 中有不同的含義和用途,本文主要介紹了C語言中((type *)0) 和(type *0)區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下2024-08-08Qt數(shù)據(jù)庫應(yīng)用之?dāng)?shù)據(jù)打印到pdf
因?yàn)閤ls打開以后用戶可以修改數(shù)據(jù)造假之類的,而pdf默認(rèn)是不可編輯的,除非借助專業(yè)的工具,所以如果想要限定用戶導(dǎo)出數(shù)據(jù)不能被更改,那導(dǎo)出pdf是最佳選擇。所以本文將為代價(jià)介紹Qt實(shí)現(xiàn)數(shù)據(jù)打印到pdf的方法,需要的可以參考一下2022-01-01C語言中數(shù)組作為函數(shù)的參數(shù)以及返回值的使用簡(jiǎn)單入門
這篇文章主要介紹了C語言中數(shù)組作為函數(shù)的參數(shù)以及返回值的使用簡(jiǎn)單入門,這里以一維數(shù)組作為基本條件進(jìn)行例子講解,需要的朋友可以參考下2015-12-12