[問題] ##用法

看板C_and_CPP作者 (尋找奶昔)時間14年前 (2010/11/16 14:21), 編輯推噓9(909)
留言18則, 7人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) 看到 define 裡都會放 ##這個符號 也查到了是連接字串用的 可以搭配迴圈使用嗎 希望得到的正確結果: #define lightOn(__num) abc.##__num=1 for(i = 0; i < 7; i++) lightOn(i); 程式跑出來的錯誤結果: Error has no member named 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) g++ 有問題的code: (請善用置底文標色功能) 同二 補充說明: 先跟各位大大說謝謝了 -- 究竟再夢中牽著我的手 走進協志的那個人是誰... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.2.251

11/16 14:38, , 1F
define是preprocessor時作用 for迴圈是執行時再跑
11/16 14:38, 1F

11/16 14:42, , 2F
執行時是被展開成 abc.i=1; 先想想這是不是你要的吧
11/16 14:42, 2F
原來如此 感謝I大解說 ※ 編輯: sorkayi 來自: 122.117.2.251 (11/16 14:45)

11/16 17:05, , 3F
請用template
11/16 17:05, 3F

11/16 17:15, , 4F
其實一般狀況,幾乎不太會用到##這東西
11/16 17:15, 4F

11/16 17:15, , 5F
那個是文字連接, 看你的用法 i 是整數, abc.1 也是不
11/16 17:15, 5F

11/16 17:17, , 6F
合語法的用法, 關於樓樓上說的模板...應該是不能解
11/16 17:17, 6F

11/16 17:52, , 7F
原po要的不就是在編譯期展開abc.***__num?
11/16 17:52, 7F

11/16 17:53, , 8F
先不管abc.1__num是否合語法
11/16 17:53, 8F

11/16 18:00, , 9F
這個成員名稱必須是可以當參數傳遞的...
11/16 18:00, 9F

11/16 18:24, , 10F
用特化寫死也很怪...
11/16 18:24, 10F

11/16 18:28, , 11F
只能寫死啊,不然怎麼在編譯期做?preprocess應該也可以
11/16 18:28, 11F

11/16 18:29, , 12F
辦到,只不過要用到類似加法器的做法
11/16 18:29, 12F

11/16 18:41, , 13F
其實最根本的方法就是不要把數字嵌進名字裡, 明明有陣
11/16 18:41, 13F

11/16 18:41, , 14F
列可以寫
11/16 18:41, 14F

11/16 22:15, , 15F
## 在一些 dirty work 還是常出現,越神的 lib 實作越常見
11/16 22:15, 15F

11/16 22:16, , 16F
當然不會是這篇的這種用法 XD
11/16 22:16, 16F

11/16 23:23, , 17F
目前看過的code裡, GL driver用不少....XD
11/16 23:23, 17F

11/17 09:24, , 18F
哪家的啊 XD Mesa ?
11/17 09:24, 18F
文章代碼(AID): #1CuYBQ-C (C_and_CPP)