如何在预处理器时追加到__FILE__并包含结果

时间:2017-08-23 15:08:55

标签: c++ c-preprocessor

我想在component.h.gen中加入component.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的解决方案?

请注意,我计划在数百甚至数千个文件中使用它,我想通过复制粘贴相同的代码来简化我的生活 - 这就是为什么我要尝试让它发挥作用。

2 个答案:

答案 0 :(得分:3)

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

  • $From = "c:\test folder\content" $To = "c:\test folder\archive\new" $Content = Get-Content -path "c:\Test Folder\Content\content.txt" | Out-String $Archive = Get-ChildItem -path "c:\Test Folder\Archive\" -name | Out-String If($Archive -notin $Content){ #gets child items and copies them to a new folder Get-ChildItem $From -recurse | Copy-Item -destination $To #gets content of file $Text = Get-Content -path 'c:\test folder\archive\new\content.txt' #renames the item Rename-item -Path 'c:\test folder\archive\new' -NewName $Text } 扩展为字符串;你不能解串一个字符串。所以只需添加" rest"字符串,然后字符串化结果,是不可用的。
  • 粘贴两个字符串标记不会创建有效标记。所以粘贴是不可用的。
  • 预处理器不存在字符串文字串联(预处理器是转换阶段4;字符串文字串联是阶段6)。

答案 1 :(得分:1)

有点晦涩,但似乎可以用gcc。

看看这个问题的第二个答案:

C Macro - Dynamic #include