使用宏來創建方法名稱通常是否有效?我的意思是......實際上它只是在編譯器實際運行之前進行簡單的文本替換,對吧?宏也可以生成一個方法名?
0
A
回答
1
是的,它是有效的;在編譯器甚至讀取代碼之前發生宏擴展。主要限制是不能在預處理器指令中嵌入預處理器指令。因此,舉例來說:
// This is ok:
#define PREFIX(X) this_name_is_prefixed_ ## X
// ...
- (void) PREFIX(doSomething):id;
// ...
// But this isn't:
#define IMPORT(X) #import X
IMPORT(<Foundation/Foundation.h>) // <= Don't expect this to work
隨着「#進口」指令外,Objective-C的預處理器基本上是一樣的C preprocessor。 (「#import」類似於「#include」,不同之處在於#import意味着只包含一次,所以只包含#import的頭文件不需要預處理器保護)。
1
沒有什麼可以阻止這種情況。它甚至是常用的(儘管我不知道用於iPhone),例如,在設備驅動程序實現中。在這種情況下,宏將用於生成樣板代碼,並且爲了與此代碼進行通信,您必須猜測正確的函數名稱(不建議),或者使用生成宏,例如USB_ATTACH(uthum)
來生成爲uthum
驅動程序附加方法。
相關問題
- 1. 在宏中生成方法名稱
- 2. 一個Rust宏可以生成多個聲明嗎?
- 3. 是否可以從bjam生成一個.h宏文件?
- 4. common lisp:宏如何用程序生成的名稱定義其他方法/宏?
- 5. 你可以將一個匿名方法(函數)動態地變成一個命名方法嗎?
- 6. 可以JMeter的主也可以是負載生成
- 7. 在scala 2.10中有一個宏調用可以生成幾個頂級類嗎?
- 8. 有沒有一種方法可以從protobuf生成GraphQL模式?
- 9. 有沒有一種方法可以從Domino Designer中生成JavaDoc?
- 10. Java代碼生成 - 有沒有一種方法可以用你想要的名字動態生成文件夾?
- 11. 生成一個令牌,我可以證明我生成了
- 12. 生成一個Obj-C方法
- 13. Python生成器下一個方法
- 14. 從一種方法生成2個值
- 15. 生成與宏
- 16. 是否可以生成一個排除內部方法的.NET堆棧跟蹤?
- 17. 我可以在方法調用中自動生成一個類嗎?
- 18. 在宏中生成包含文件名
- 19. 如何創建一個在SISC/Scheme中生成另一個宏的宏?
- 20. 我可以製作一個HALT_ONCE宏嗎?
- 21. 數字生成器方法的名稱
- 22. Java如何爲方法生成簽名?
- 23. 爲匿名方法生成IL
- 24. 我可以更改Visual Studio生成的COM Interop方法的簽名嗎?
- 25. 生成`從宏觀
- 26. C預處理器宏可以生成函數嗎?
- 27. 宏可以根據文件內容生成代碼嗎?
- 28. 如何使用宏以編程方式生成Excel
- 29. automake以編程方式生成規則/使用宏
- 30. 我可以在Scala類中定義一個無名方法嗎?