Re: [問題] static global 變數 跟 無名的namespac …

看板C_and_CPP (C/C++)作者 ( )時間16年前 (2009/09/04 16:33), 編輯推噓2(204)
留言6則, 2人參與, 最新討論串1/3 (看更多)
※ 引述《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)

09/04 17:44, , 1F
謝謝T大 不過後面的那段我比較難理解 那好習慣是甚麼呢
09/04 17:44, 1F

09/04 17:47, , 2F
就是不做那些事。
09/04 17:47, 2F

09/04 18:09, , 3F
如果只在cpp使用static或是namespace感覺跟直接宣告global
09/04 18:09, 3F

09/04 18:10, , 4F
不知道差別在哪耶@@
09/04 18:10, 4F

09/04 19:40, , 5F
一樣啊,就是在那裡面用可以避免跟外界衝 symbol。
09/04 19:40, 5F

09/04 19:40, , 6F
如果你用 icc 的話它還會警告你沒給外面用最好直接 static
09/04 19:40, 6F
文章代碼(AID): #1AeD3e_9 (C_and_CPP)
文章代碼(AID): #1AeD3e_9 (C_and_CPP)