国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言中的頭文件能不能重復包含

學益得智能硬件 ? 來源:學益得智能硬件 ? 2024-11-26 17:19 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

C語言中的頭文件能不能重復包含?

比如代碼寫成這樣,stdio.h 連續包含了兩次。

#include 
#include 

int main()
{
    printf("helloworld
");
    return 0;
}

我們先來編譯看下,好像沒有任何問題。

root@Turbo:~# gcc test.c -o test 
root@Turbo:~#

同一個頭文件,隨便包含多少次,都不會有問題,主要是這兩行代碼起了作用。

#ifndef _STDIO_H
#define _STDIO_H    1

寫頭文件的時候,習慣上都會加上兩個預處理指令,ifndef 和 define。

就以這個 test.h 為例:

#ifndefTEST_H
#define TEST_H

struct Test
{
    int a;
};

#endif

在 test.h 里面聲明了一個結構體,然后在源文件中包含了兩次。

頭文件往往在編譯的第一步,預處理的時候展開。

第一次展開 test.h 的時候,會遇到預處理指令 ifndef:

#ifndef TEST_H

翻譯過來就是如果沒有定義這個宏。

很顯然,這個宏確實沒有定義過,于是判斷成立。

繼續往下走,遇到 define:

#define TEST_H

意思就是把這個宏定義一下。

然后就是把 test.h 里面的內容搬到源文件中,這就是所謂的展開。

第二次包含 test.h 的時候,重復上面的操作。

先是遇到 ifndef,很顯然,這個宏剛才定義過,于是這條預處理指令不成立,下面的所有代碼都會跳過。

這樣就清楚了,雖然我們在源碼里面包含了 test.h,但是因為判斷不成立,并沒有真正的包含進去。

相同的頭文件在一個源碼文件中可以重復包含,因為預處理指令的存在,所以并不會出問題。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    183

    文章

    7644

    瀏覽量

    145565
  • 代碼
    +關注

    關注

    30

    文章

    4967

    瀏覽量

    73954

原文標題:重復包含頭文件有什么影響

文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    請問C語言中整形溢出的解決方法有哪些?

    C語言中整形溢出的解決方法有哪些?
    發表于 12-29 07:33

    單片機c語言中定義字節怎么定義?

    定義位可以用***it但是定義字節呢?還有就是比如匯編中的DPTR的DPH和DPL在c語言中怎樣定義的呢?
    發表于 12-29 06:32

    請問C語言中整形溢出會產生哪些異常行為?

    C語言中整形溢出會產生哪些異常行為?
    發表于 12-26 07:05

    請問C語言中整形溢出對哪些應用場景影響較大?

    C語言中整形溢出對哪些應用場景影響較大
    發表于 12-24 08:24

    C語言中可以嵌套匯編語言嗎?

    請問C語言中可以嵌套匯編語言嗎?
    發表于 12-15 08:14

    到底DDR走線能不能參考電源層啊?

    雖然我看到過DDR的走線參考電源平面也能調試成功的案例,但是依然不妨礙我還想問:到底DDR走線能不能參考電源層啊?
    的頭像 發表于 11-11 17:44 ?758次閱讀
    到底DDR走線<b class='flag-5'>能不能</b>參考電源層啊?

    使用MCU200T的板子能不能做RVSTAR上的實驗例子?

    手里只有一塊MCU200T的板子,看到老師做的RVSTAR上的例子,不知道能不能在MCU200T上面做
    發表于 11-05 12:55

    頭文件保護失效,提示變量重復包含,是什么原因導致的?

    我自定了一個頭文件,而且使用了頭文件保護機制。但是在兩個源文件包含相同的頭文件時,依然提示某些變量重復
    發表于 10-09 06:19

    工廠設備能不能工業數采?3招教你快速判斷,省時又省錢!

    設備能不能采?記住這五招:看接口、問協議、查燈亮、找廠家、加傳感器。大部分現代工廠設備(PLC/CNC/注塑機),甚至部分干燥機、模溫機,都是能采的!別被“老設備”嚇住。
    的頭像 發表于 07-03 10:09 ?733次閱讀
    工廠設備<b class='flag-5'>能不能</b>工業數采?3招教你快速判斷,省時又省錢!

    cyw20829能不能使用紅外線解碼嗎?

    cyw20829能不能使用紅外線解碼嗎
    發表于 07-03 06:49

    深入理解C語言C語言循環控制

    C語言編程中,循環結構是至關重要的,它可以讓程序重復執行特定的代碼塊,從而提高編程效率。然而,為了避免程序進入無限循環,C語言提供了多種循
    的頭像 發表于 04-29 18:49 ?2034次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:<b class='flag-5'>C</b><b class='flag-5'>語言</b>循環控制

    labview輸出不重復隨機數

    大佬們能不能告知一下這張圖為什么還是會輸出重復的數,然后這個移位寄存器的紅點也消不掉
    發表于 04-17 10:51

    STM32C031F4 FLASH存儲器讀寫例程各位高能不能提供一個?

    STM32C031F4FLASH存儲器 讀寫例程 各位高能不能提供一個謝謝大家
    發表于 03-13 07:37

    請問SPC5_STUDIO能不能用stellarllink進行連接?如何連接?

    SPC5_STUDIO能不能用stellarllink進行連接?如何連接?
    發表于 03-10 08:18

    stm32f103cbu6底部焊盤能不能連接到VSS?

    stm32f103cbu6底部焊盤能不能連接到VSS
    發表于 03-10 07:51