[問題] 預處理及namespace的用法討論

看板C_and_CPP作者 (AA)時間11年前 (2013/02/22 13:57), 編輯推噓3(302)
留言5則, 4人參與, 最新討論串1/1
一般情況是有多組同名常數時會用預處理 #ifdef CodeA #define a xxx; #define b yyy; #endif #ifdef CodeB #define a yyy; #define b ppp; #endif 如果要處理變數時雖然怪怪的,但下面這種也看過... #ifdef CodeA int a = xxx; int b = yyy; #endif #ifdef CodeB int a yyy; int b ppp; #endif 然後用#define CodeA //#define CodeB當開關 但我總覺得這樣寫不太好(雖然我也說不上哪裡不好,但我總覺得盡量少用預處理..), 因此我自己是想用namespace 包起來 由於在我自己看過的code中,極少看到有人寫namespace (大部分看得的code都還是用純c就是...) 有多組同名變數global 變數用namespace包起來(取代預處理) namespace setA { int a=xxx; int b=ooo; ..... } namespace setB { int a = yyy; int b = ppp; } if (/*Condition A*/) using namespace setA; if(/*Condition B*/) using namespace setB; --------------------------- 但這種寫法卻似乎很少看到, 反而是寫預處理的情況比較多 想請問如果不得不用global變數,而且有多組同名"變數"時,用這個方法是否適當? 或是有什麼特別的方法可以代替 (寫介面好像又太複雜了...) 或者是其實這種情況就留給預處理器就好了,然後我應該改掉我的潔癖...? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.68.86.252 ※ 編輯: whoowh 來自: 210.68.86.252 (02/22 14:00) ※ 編輯: whoowh 來自: 210.68.86.252 (02/22 14:03)

02/22 14:06, , 1F
我想之所以會用預處理的一個可能原因是 C 沒有 namespace...
02/22 14:06, 1F

02/22 14:11, , 2F
namespace 不是用來搞這些事的,你不會一開始寫個函數
02/22 14:11, 2F

02/22 14:11, , 3F
去根據你的設定值,來令 a = xxx 還是 a = yyy;
02/22 14:11, 3F

02/22 17:27, , 4F
你應該沒有驗過你的寫法吧..那樣根本不會引入setA or setB
02/22 17:27, 4F

02/22 18:10, , 5F
對耶 我發現我完全想錯了 謝謝指正
02/22 18:10, 5F
文章代碼(AID): #1H9mYvhN (C_and_CPP)