javascript - GCC预处理器如何用空行替换#define
问题描述
我正在尝试将 GCC 预处理器与 Javascript 源代码一起使用。
我想在原始源和输出之间保持行号相同。这样如果输出中的 JS 代码有任何错误,行号应该与原始文件中的行号匹配。
我想从此输入实现以下输出:
Line 1 // comment
Line 2 #define ASDF 'asdf'
Line 3
Line 4 var asdf = ASDF
输出:
Line 1 // comment
Line 2
Line 3
Line 4 var asdf = 'asdf'
我怎样才能实现上述目标?
到目前为止,我已经尝试过:
/usr/bin/cpp -P -undef -Wundef -std=c99 -nostdinc -Wtrigraphs -fdollars-in-identifiers -traditional-cpp -E -C $INFILE -o $OUTFILE
-traditional-cpp
保留空白,保留-E
注释。
是否可以用空行的预处理器指令替换所有行?
解决方案
跑步
gcc -xc file.c -E -P -o file.txt
反对(3行)
#define ASDF 'asdf'
var asdf = ASDF
产量(1 行)
var asdf = 'asdf'
因此,并不是所有请求的行都是空的,而是它们被完全删除了。也许这符合你的目的?有了-traditional-cpp
,有一堆空行,但不知道它们来自哪里......添加以查看打印-v
发出的子命令:gcc
.../cc1 -E -quiet -v -P -o file.txt <irrelevant-options>
附录1:为了保留评论,添加-C
cpp file.c -E -P -C -nostdinc
我需要,-nostdinc
因为否则 gcc 会包括/usr/include/stdc-predef.h
. 但是空行仍然被删除。
推荐阅读
- c# - 文件服务器上的 .db 文件不能用于连接字符串
- java - 用于 War 部署和独立应用程序的 Spring Boot 应用程序
- git - Git起源落后于头脑
- xml - XSLT 基于内容选择和合并节点
- macos - 是否可以在 Interface Builder 中加入 NSGridView 的单元格?
- reactjs - 使用 getsteam.io 在时间轴上发布并拒绝获得许可
- c# - 使用 C# 读取特定字符串并创建表
- ruby-on-rails - 什么可以在 Rails 中创建线程?
- javascript - javascript水平滚动日期时间选择器,当前时间始终位于中心
- python - 如何使用 ID 整数跟踪 Django 中的请求?