【问题标题】:Preprocessor C program to replace include headers用于替换包含头文件的预处理器 C 程序
【发布时间】:2021-04-06 19:51:09
【问题描述】:

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

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

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

编辑:无需检查#defines#ifdefs

【问题讨论】:

  • 我不会担心效率,只要按照你的想法去做。之后,如果你想改进,那就去做吧。
  • #ifdefs 怎么样?你也需要处理这些,还是只需要#includes?
  • 不用担心#ifdefs#defines,只需要担心#includes
  • 正如@Fredrik 所写,这非常简单,检测行首并实现this regex 的等效项。
  • @mudcip 他说实现相当于正则表达式,但你没有要求实施,你要求一种有效的方法来做到这一点,你不应该关心。开始实施解决方案,如果遇到任何问题,请提出新问题。

标签: c include header-files preprocessor ansi


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 2019-06-22
    • 2018-05-11
    • 2013-03-10
    相关资源
    最近更新 更多