首页 > 解决方案 > 用于替换包含头文件的预处理器 C 程序

问题描述

我有家庭作业,我需要编写一个程序来用实际的 .h' 文件(执行预处理器的工作)替换 C 文件的包含命令(假设没有标准库包含)。

我想使用正则表达式匹配,但由于我们只允许使用 ansi-C 的标准库,所以不允许使用正则表达式。

我不确定这样做的有效方法是什么?

编辑:无需检查#definesor #ifdefs

标签: cincludeheader-filespreprocessoransi

解决方案


我建议您按照本指南创建程序:

  1. 以只读方式打开目标 c 文件。
  2. 打开目标文件只写。
  3. 创建一个传递输入文件和输出文件的函数,我将调用此函数“expand_function”。
  4. 在expand_function中读取输入的每个字节,并在读取每个字符时检查是否为#,然后测试是否为include关键字,最后如果所有条件都匹配,则打开将在include前面的文件名,然后调用再次使用新输入文件和相同输出文件的 expand_function(不要忘记关闭所有打开的文件),最后继续循环。如果任何条件不匹配,则将所有读取的字节写入输出文件。
  5. 额外:检查您是否不在expand_function开头的包含死循环中。

推荐阅读