c - 用于替换包含头文件的预处理器 C 程序
问题描述
我有家庭作业,我需要编写一个程序来用实际的 .h' 文件(执行预处理器的工作)替换 C 文件的包含命令(假设没有标准库包含)。
我想使用正则表达式匹配,但由于我们只允许使用 ansi-C 的标准库,所以不允许使用正则表达式。
我不确定这样做的有效方法是什么?
编辑:无需检查#defines
or #ifdefs
。
解决方案
我建议您按照本指南创建程序:
- 以只读方式打开目标 c 文件。
- 打开目标文件只写。
- 创建一个传递输入文件和输出文件的函数,我将调用此函数“expand_function”。
- 在expand_function中读取输入的每个字节,并在读取每个字符时检查是否为#,然后测试是否为include关键字,最后如果所有条件都匹配,则打开将在include前面的文件名,然后调用再次使用新输入文件和相同输出文件的 expand_function(不要忘记关闭所有打开的文件),最后继续循环。如果任何条件不匹配,则将所有读取的字节写入输出文件。
- 额外:检查您是否不在expand_function开头的包含死循环中。
推荐阅读
- ruby-on-rails - Sidekiq 没有以大于 1 的并发运行
- swift - 自定义 uilabel 并使其国际化的最佳方法
- c# - 使用流进行图像解码的列表视图
- javascript - 摇动以撤消问题 ios Safari
- java - '蜂巢上的火花' - 引起:java.lang.ClassNotFoundException:org.apache.hive.spark.counter.SparkCounters
- r - ggplot 将不同的图形合二为一
- javascript - 在根和任何对象之间的对象树中查找对象
- neo4j - 如何检查节点是否全局存在并在 Cypher 中设置条件?
- storage - 存储 api 不适用于 Microsoft Edge 上的自签名扩展
- sql-server - SQL Server 命名实例 TCPIP 端口设置和端点/基础结构权限错误