• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            <2025年8月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            統計

            • 隨筆 - 24
            • 文章 - 0
            • 評論 - 17
            • 引用 - 0

            常用鏈接

            留言簿(4)

            隨筆分類

            隨筆檔案

            相冊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            有關include guard的一個好帖子(收藏)
            終于弄清楚了原來說的同一個頭文件不能被兩次或兩次以上包含是針對同一個源文件而言的。借用80后的流行語,真是漢哪!

            原貼地址:http://www.keil.com/forum/docs/thread10237.asp

            作者 Per Westermark

            The

            #ifndef xx
            #define xx
            ...
            #endif
            

            method is to make sure that a header file isn't included more than once from the same c file.

            You can not - and normally don't want to - stop multiple c files from including the same header file.

            A header file is included because:
            1) You have specifically added a line #include "xx" or #include <xx> in the source file. Don't do that unless you want the file to be included :)
            2) You are including one header file, that it it's turn (one or more steps away) includes another header file. But a header file should only contain a recursive #include if it really needs that other file for some declarations. Hence, you need to include it.

            What does this mean?

            If the header file must be seen by multiple source files, you can't use it to allocate global variables, since the linker would then complain about multiple sets of global variables with the same name. This can be solved with the following:

            //globals.h
            #ifndef _GLOBALS_H
            #define _GLOBALS_H
            #if defined MAIN
            #define EXTERN
            #else
            #define EXTERN extern
            #endif
            ...
            EXTERN int my_global_variable;
            #endif // _GLOBALS_H
            

            // main.c
            #define MAIN
            #include "globals.h"
            ...
            // misc.c
            #include "globals.h"
            ...
            

            In this case, only the inclusion in main.c will result in an "allocation" of global variables, because the #define EXTERN will be empty. All other source files that includes "globals.h" will just see the type information for the global variables.

            posted on 2009-02-19 09:04 小蔥蘸醬 閱讀(1005) 評論(2)  編輯 收藏 引用

            評論

            # re: 有關include guard的一個好帖子(收藏) 2009-02-19 21:19 陳梓瀚(vczh)

            EXTERN的時候,如果剛好main沒有引用它,那就鏈接錯誤了- -#
              回復  更多評論    

            # re: 有關include guard的一個好帖子(收藏)[未登錄] 2009-02-20 16:15 小蔥蘸醬

            @陳梓瀚(vczh)
            歡迎評論!
            只要在include "globals.h"前定義了MAIN,就不會聯接錯誤,跟引用有什么關系呢?
              回復  更多評論    
            久久无码专区国产精品发布| 狠狠色丁香久久综合婷婷| 久久福利青草精品资源站| 精品久久一区二区| 久久久久无码精品| 亚洲人成无码www久久久| 伊人久久精品无码av一区| 亚洲国产精品久久久天堂| 久久综合九色综合欧美狠狠| 久久精品国产一区二区电影| 九九精品99久久久香蕉| 久久夜色撩人精品国产| 久久精品国产只有精品2020| 久久夜色精品国产噜噜噜亚洲AV| 久久91精品国产91久久麻豆| 久久国产欧美日韩精品免费| 日韩人妻无码一区二区三区久久 | 久久久99精品成人片中文字幕| 亚洲人AV永久一区二区三区久久 | 少妇高潮惨叫久久久久久| 亚洲国产成人久久精品99| 国产99久久久国产精免费| 国内精品久久久久影院日本| 久久亚洲精品国产亚洲老地址| 色悠久久久久久久综合网| 色婷婷综合久久久久中文字幕 | 亚洲国产欧美国产综合久久| 欧美日韩精品久久久久| 久久久噜噜噜www成人网| 欧美日韩精品久久久久| 国产亚洲精久久久久久无码77777 国产亚洲精品久久久久秋霞 | 成人久久免费网站| 国产成人精品久久亚洲高清不卡| 国产精品青草久久久久婷婷| 亚洲伊人久久大香线蕉苏妲己| 久久99精品久久久久久hb无码 | 国产成人久久精品麻豆一区| 久久无码AV中文出轨人妻| 国内精品久久久久久99蜜桃| 久久久久久av无码免费看大片| 亚洲国产精品无码久久久秋霞2 |