解析C++预处理器#if语句

use*_*876 4 c c++ python parsing c-preprocessor

我有一个带条件编译的C/C++源文件.在我将它发送给客户之前,我想删除大多数#if语句,这样我的客户就不必担心将正确的-D选项传递给编译器.

我已经在Python中实现并使用它,但它只能正确处理#ifdef和#ifndef语句.我需要添加对#if语句的支持,但#if的语法要复杂得多.(例如,您可以使用&&,||,!,括号,关系运算符,算术等).

是否有任何现有的开源代码来解析和评估#if语句?(最好是在Python中).

我所知道的唯一实现是GCC,这对于这项任务来说太复杂了.

Mic*_*urr 14

正如KeithB所说,你可以让预处理器为你做这件事.

但是如果你不想隐藏东西(即,有条件编译的代码中可能存在你不想要或者不允许给其他人的东西),那么更简单的选择就是放#define全局包含的标头中的正确指令.

  • 您的客户无需担心-D选项
  • 您不必在构建过程中有一些自定义步骤
  • 您为客户提供的代码不一定是半混淆的
  • 你没有引入错误,因为该工具与C预处理器略有不同
  • 您不必维护一些自定义工具


Kei*_*thB 12

如何通过C预处理器,并让它完成工作.它将摆脱所有这些,因此您可能需要预处理器前步骤和后预处理器步骤来保护您不想扩展的内容.

  1. 将所有#include更改为@include
  2. 通过预处理器传递文件
  3. 将@include更改回#include


Pau*_*lin 8

而不是重新发明轮子,下载"unifdef".如果您使用某种Linux版本,可以找到适合它的软件包,否则它就在FreshMeat上