作者tinlans ( )
看板C_and_CPP
標題Re: [問題] static global 變數 跟 無名的namespac …
時間Fri Sep 4 16:33:41 2009
※ 引述《QQ29 (我愛阿蓉)》之銘言:
: 如標題
: 據我理解
: static global的變數 寫在.h 然後include這.h的file都擁有一份 這名稱的變數
: 如果這.h 裡面是用
: namespace { int x;}把東西包起來
: 據我理解 效果跟static global變數 是一樣的
: 請教各位兩者差異 以及哪個寫法比較好...
: 我印象中 有人說namespace的寫法比較好~~但是我爬不太到文章
: 謝謝各位
如果你有使用一些 library 所以 #include 了一堆 header files,
你用 global static 還是可能跟它的名稱發生衝突,
像是 basename() 這東西在 <libgen.h> 有宣告,
你如果自己寫的 code 有定義一個 local 的 basename(),
那就會出現宣告式/定義式不一致的 error (一個有 static 一個沒有就會 error),
你用 anonymous namespace 就不會有這問題。
不過在 header file 使用 static 或 anonymous namespace 都不是好習慣,
在 header file 裡開 anonymous namespace 放 functor 也是不正確的做法,
GCC 4.2 以後的行為可能會讓有這些習慣的人大吃一驚,
因為 hidden 的 visibility 屬性會隨 template 參數傳遞下去。
--
Ling-hua Tseng (uranus@tinlans.org)
Department of Computer Science, National Tsing-Hua University
Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design
Researching: Software pipelining for VLIW architectures
Homepage:
https://www.tinlans.org
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.160.109.33
※ 編輯: tinlans 來自: 118.160.109.33 (09/04 16:36)
推 QQ29:謝謝T大 不過後面的那段我比較難理解 那好習慣是甚麼呢 09/04 17:44
→ tinlans:就是不做那些事。 09/04 17:47
推 QQ29:如果只在cpp使用static或是namespace感覺跟直接宣告global 09/04 18:09
→ QQ29:不知道差別在哪耶@@ 09/04 18:10
→ tinlans:一樣啊,就是在那裡面用可以避免跟外界衝 symbol。 09/04 19:40
→ tinlans:如果你用 icc 的話它還會警告你沒給外面用最好直接 static 09/04 19:40