HC4*_*ica 7 c c++ include c-preprocessor
有没有办法部分预处理C或C++源文件?通过"部分预处理",我的意思是扩展一些但不是全部的#include指令.例如,我想扩展#includes指向我的项目标题,但不是#includes指向其他库的标题.
我尝试通过gcc -E仅运行-I我的项目标题的-I标志而不是库的标志来执行此操作,但这不起作用,因为gcc在遇到#include时无法展开时发出错误.
编辑:我并不关心预处理器在宏扩展方面的行为.
C预处理器不够智能,无法自行完成.如果您只对它感兴趣#include,您应该只使用自己的工具(例如Perl)来处理源文件,扩展#include您感兴趣的行并忽略其余行.
此脚本为不感兴趣的标题行添加前缀// Ignored:
#!/usr/bin/perl
use warnings;
use strict;
my @uninteresting = qw(iostream vector map);
my $uninteresting = join '|', @uninteresting;
while (<>) {
s%(#include <(?:$uninteresting)>)%// Ignored $1%;
print;
}
Run Code Online (Sandbox Code Playgroud)
现在你可以这样做:
cat sourcefile.cpp | perl ignore-meh.pl | g++ -E
Run Code Online (Sandbox Code Playgroud)
如果你想得到真正的幻想:
#!/usr/bin/perl
use warnings;
use strict;
while (<>) {
s%// Ignored (#include <[^>]+>)%$1%;
print;
}
Run Code Online (Sandbox Code Playgroud)
现在你可以这样做:
cat sourcefile.cpp | perl ignore-meh.pl | g++ -E | perl restore-meh.pl
Run Code Online (Sandbox Code Playgroud)
#include您不想扩展的内容,可以替换为类似的内容($$$include简而言之,预处理器无法理解)。最好首先将原始文件复制到临时文件中,然后运行gcc -E <filename>;。完成后,再次替换原始源文件。
这里唯一的问题是您必须至少编辑一次源文件。但这可能不是什么大问题,因为您可以使用文本编辑器提供的功能。
| 归档时间: |
|
| 查看次数: |
2652 次 |
| 最近记录: |