簡體   English   中英

如何在預處理程序時附加到__FILE__並包括結果

[英]how to append to __FILE__ at preprocessor time and include the result

我想包括component.h.gencomponent.h

我已經看到我可以將__FILE__#include一起使用,並且如果沒有標題保護,則會導致遞歸包含。

有沒有辦法附加C字符串文字並包含結果? 到目前為止,這是我嘗試過的:

#define CAT_IMPL(s1, s2) s1##s2
#define CAT(s1, s2) CAT_IMPL(s1, s2)
#define DO_IT CAT(__FILE__, ".gen")

#include DO_IT

但這會導致包括文件本身在內的文件具有相同的遞歸- ".gen"部分未使用-我在MSVC中收到以下警告:

警告C4067:預處理指令后出現意外的標記-預期換行

有沒有可以與gcc / clang / msvc一起使用的解決方案?

請注意,我打算在數百個(甚至數千個)文件中使用它,並且我想通過復制粘貼相同的代碼來簡化我的工作,這就是為什么我要使其正常工作。

不幸的是,這是不可能的:

  • __FILE__擴展為字符串; 您不能取消字符串的字符串化。 因此,僅添加字符串的“其余”然后對結果進行字符串化的技術不可用。
  • 粘貼兩個字符串標記不會創建有效的標記。 因此無法粘貼。
  • 預處理程序不存在字符串文字串聯(預處理器是轉換階段4;字符串文字串聯是階段6)。

有點晦澀難懂,但似乎可以用gcc實現。

看這個問題的第二個答案:

C宏-動態#include

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM