c語(yǔ)言null沒(méi)有被定義 “空”可以用語(yǔ)言描述嗎?怎么樣?
“空”可以用語(yǔ)言描述嗎?怎么樣?我會(huì)附上一個(gè)方法來(lái)實(shí)現(xiàn)這個(gè)功能,但我想說(shuō)的是,這樣做是沒(méi)有意義的。即使您可以通過(guò)某種方式成功編譯,甚至輸出null,您的程序也可能無(wú)法運(yùn)行,或者在運(yùn)行時(shí)會(huì)出現(xiàn)錯(cuò)誤。作為
“空”可以用語(yǔ)言描述嗎?怎么樣?
我會(huì)附上一個(gè)方法來(lái)實(shí)現(xiàn)這個(gè)功能,但我想說(shuō)的是,這樣做是沒(méi)有意義的。即使您可以通過(guò)某種方式成功編譯,甚至輸出null,您的程序也可能無(wú)法運(yùn)行,或者在運(yùn)行時(shí)會(huì)出現(xiàn)錯(cuò)誤。
作為一種靜態(tài)編譯語(yǔ)言,在編譯階段或預(yù)編譯階段查找錯(cuò)誤比在運(yùn)行時(shí)查找錯(cuò)誤更有意義,因此當(dāng)前編譯器將變得更加智能,幫助您檢查程序中的潛在問(wèn)題,提示您進(jìn)行修改,包括找不到include中指定的文件。所有這一切的唯一目的是提前發(fā)現(xiàn)問(wèn)題,它使運(yùn)行時(shí)程序更加健壯和高效。
那么如何強(qiáng)制實(shí)現(xiàn)這個(gè)功能呢?當(dāng)然,最直接的方法是修改編譯器,這對(duì)于大多數(shù)商業(yè)編譯器是不可行的,因?yàn)槟鷽](méi)有源代碼。然而,像GCC這樣的開(kāi)放源碼軟件仍然可以嘗試,但這更困難。能改變的人永遠(yuǎn)不會(huì)做這種毫無(wú)意義的事。
我想談的另一個(gè)簡(jiǎn)單方法是編寫(xiě)一個(gè)檢測(cè)工具。它的功能非常簡(jiǎn)單。它是分析每個(gè)include指令,然后檢查文件是否存在。對(duì)于不存在的問(wèn)題,請(qǐng)將指令替換為空輸出語(yǔ)句,例如:
file1。H
//存在
文件2。H
//不存在
//文件內(nèi)存
運(yùn)行檢測(cè)工具后:
#include“File1。H”//exists
打?。ā皀ull在文件%s的第%d行“uuuuuuuuuu文件,uuuuuuuuuuuuuuuuuuuuuuu行)
//文件內(nèi)容
然后在編譯之前運(yùn)行此工具。對(duì)于未使用的include文件,此方法將輸出null。對(duì)于文件中使用的include文件的內(nèi)容,如變量、宏或函數(shù),將提示編譯錯(cuò)誤。
下面是如何在vc2017中設(shè)置自定義工具,如下圖所示:
打開(kāi)項(xiàng)目屬性->自定義生成步驟->配置相關(guān)參數(shù)。
c語(yǔ)言,各位大佬問(wèn)一下,有沒(méi)有什么辦法使得include函數(shù)找不到對(duì)應(yīng)文件名的時(shí)候,輸出null呢?
在C語(yǔ)言中,null和0的值是一樣的,但是為了便于識(shí)別,為了目的和目的,null用于指針和對(duì)象,0用于數(shù)值。對(duì)于字符串的結(jié)尾,使用“0”,其值也是0。但是,人們可以看到這是字符串的結(jié)尾,而不是指針或普通的數(shù)值。在不同的系統(tǒng)中,null并不總是與0相同。同樣,null只表示一個(gè)null值,也就是說(shuō),它指向一個(gè)不使用的地址。在大多數(shù)系統(tǒng)中,0被認(rèn)為是一個(gè)不被使用的地址,因此有一個(gè)類(lèi)似“define null”的定義0并不總是這樣。某些系統(tǒng)不使用0地址作為null,而是使用其他地址。因此,不要將null等同于0,特別是在一些跨平臺(tái)代碼中,這會(huì)給您帶來(lái)災(zāi)難。