gpt4 book ai didi

c++ - 部分预处理 C 或 C++ 源文件?

转载 作者:可可西里 更新时间:2023-11-01 18:21:25 25 4
gpt4 key购买 nike

有没有办法部分预处理C 或C++ 源文件? “部分预处理”是指扩展一些但不是全部的#include 指令。例如,我想扩展指向我的项目 header 的#includes,而不是指向其他库 header 的#includes。

我试图通过运行 gcc -E 来做到这一点,只为我的项目 header 使用 -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;
}

现在您可以:

cat sourcefile.cpp | perl ignore-meh.pl | g++ -E

如果你真的想变得很花哨:

#!/usr/bin/perl

use warnings;
use strict;

while (<>) {
s%// Ignored (#include <[^>]+>)%$1%;
print;
}

现在您可以:

cat sourcefile.cpp | perl ignore-meh.pl | g++ -E | perl restore-meh.pl

关于c++ - 部分预处理 C 或 C++ 源文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6482321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com