日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

《gcc五分钟系列》第六节:编译期符号检查

發(fā)布時(shí)間:2025/3/19 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《gcc五分钟系列》第六节:编译期符号检查 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

《gcc五分鐘系列》第六節(jié):編譯期符號(hào)檢查

??? 上一節(jié),我們說(shuō)了從源文件到目標(biāo)文件的編譯過(guò)程。這一節(jié),我想討論一下編譯期符號(hào)檢查的問(wèn)題。
??? 請(qǐng)?jiān)徫覍?shí)在不知道如何翻譯“reference”,“引用”似乎不能表達(dá)清楚,所以我擅自將它翻譯成“符號(hào)”。
??? 比如,第四節(jié)的例子中,main.cpp文件中只有sum()函數(shù)的聲明、而沒(méi)有定義。
??? 相信您能夠分辨C/C++中聲明和定義的區(qū)別。
??? 可是將main.cpp編譯成main.o的過(guò)程中,沒(méi)有報(bào)任何錯(cuò)誤。
???
??? 這里,我們看下面這個(gè)例子:
??? 我們只聲明了一個(gè)結(jié)構(gòu)體而沒(méi)有定義這個(gè)結(jié)構(gòu)體,然后定義一個(gè)這個(gè)結(jié)構(gòu)體的變量。
??? 代碼:

  • //struct1.cpp?
  • struct?Poo;?
  • int?main()?
  • {?
  • ????Poo?a;?
  • ????return?0;?
  • }?
  • ??? 只編譯而不鏈接:

  • g++?-c?struct1.cpp?
  • ??? 這個(gè)時(shí)候它會(huì)報(bào)錯(cuò):

  • struct1.cpp:?In?function?‘int?main()’:?
  • struct1.cpp:4:6:?error:?aggregate?‘Poo?a’?has?incomplete?type?and?cannot?be?defined?

  • ??? 這說(shuō)明,只有聲明沒(méi)有定義的結(jié)構(gòu)體不能夠定義變量。
    ??? 把代碼稍微改一下,定義這個(gè)結(jié)構(gòu)體的一個(gè)指針:

  • //struct1.cpp?
  • struct?Poo;?
  • int?main()?
  • {?
  • ????Poo?*a;?
  • ????return?0;?
  • }?

  • ??? 只編譯不鏈接,沒(méi)有任何問(wèn)題。

    ??? 這說(shuō)明,雖然不能定義變量,但是可以定義指針。
    ??? 再把代碼稍微改一下,實(shí)例化一下:

  • //struct1.cpp?
  • struct?Poo;?
  • int?main()?
  • {?
  • ????Poo?*a=new?Poo;?
  • ????return?0;?
  • }?

  • ??? 這個(gè)時(shí)候也會(huì)報(bào)錯(cuò):

  • struct1.cpp:?In?function?‘int?main()’:?
  • struct1.cpp:4:13:?error:?invalid?use?of?incomplete?type?‘struct?Poo’?
  • struct1.cpp:1:8:?error:?forward?declaration?of?‘struct?Poo’?
  • ???
    ??? 根據(jù)我的經(jīng)驗(yàn):
    ??? 1、編譯期不會(huì)報(bào)錯(cuò)的幾種情況(鏈接期會(huì)不會(huì)報(bào)錯(cuò)是另外一回事了,這里不討論):
    ??? ??? 1.1、調(diào)用一個(gè)只有聲明沒(méi)有定義的函數(shù)。
    ??? ??? 1.2、定義一個(gè)只有聲明沒(méi)有定義的類型的指針。
    ??? ??? 1.3、使用一個(gè)只有聲明沒(méi)有定義的變量。
    ??? ??? 變量如何只聲明不定義?int a;就已經(jīng)是定義了。好吧,留個(gè)懸念,大家可以自己研究一下。
    ??? 2、編譯期會(huì)報(bào)錯(cuò)的幾種情況:
    ??? ??? 2.1、定義一個(gè)只有聲明沒(méi)有定義的類型的變量。
    ??? ??? 2.2、實(shí)例化一個(gè)只有聲明沒(méi)有定義的類型。
    ??? ???
    ??? 這節(jié)好像稍微有點(diǎn)長(zhǎng),好吧。結(jié)束。

    轉(zhuǎn)載于:https://blog.51cto.com/elephantliu/652302

    總結(jié)

    以上是生活随笔為你收集整理的《gcc五分钟系列》第六节:编译期符号检查的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。