gpt4 book ai didi

C 预处理器 - 家庭作业

转载 作者:行者123 更新时间:2023-11-30 18:20:57 26 4
gpt4 key购买 nike

作业:

You are required to implement a C preprocessor. The preprocessor is to be implemented as a command-line tool, the input to which is a C source file (.c extension) and the output is the preprocessed file (.i extension). The tool also takes several options.

$ cppr <options> file.c

On successful processing, file .i is produced.

<options> may be:

Preprocessor options-
-Aassertion -C -dD -dM -dN -Dmacro[=defn] -E -H
-idirafter dir -include file -imacros file
-iprefixfile -iwithprefix dir -M -MD -MM -MMD
-nostdinc –P -Umacro –undef
Directory options-
-Bprefix -Idir -I-

Implement any two of the above. This has to be decided during requirements phase.

These are the options defined by the GCC compiler. Refer to the manpage of GCC to understand the options.

You must implement the following features at a minimum:

  1. Stripping off of comments
  2. #ifdef and #endif
  3. #define for constants (not macros)

最佳答案

不知道你到底不明白什么,要回答并不容易,但我无论如何都会尝试,利用我非常有限的 C 经验。

什么是预处理器?预处理器是在编译代码文件之前对其进行某种处理的程序。例如,您可以使用预处理器指令定义符号常量:

#define PI 3.14159

然后您可以在代码中使用此值和有意义的名称:

area = r * r * PI;
...
circumference = 2 * r * PI;

预处理器在这里所​​做的是将所有出现的 PI 替换为您指定的数值:

area = r * r * 3.14159;
...
circumference = 2 * r * 3.14159;

您还可以根据常量是否已在代码中的其他位置定义来包含代码(这通常在具有多个文件的项目中使用):

#define WINDOWS

...

#ifdef WINDOWS
/* do Windows-specific stuff here */
#endif

仅当之前定义了常量WINDOWS时,才会包含#ifdef#endif之间的行。

我希望现在您已经了解您的程序应该做什么。

有关实现“最低功能”的提示

在这里,我将向您提供一些关于如何编写教授所需的最低功能的想法。这些只是我的想法,所以请先考虑一下。

删除评论

读取输入时,查找“/*”。当你遇到它时,停止写入输出,然后当你找到“*/”时,你可以重新开始写入。使用 bool 标志来指示您是否在注释中(AFAIK,C 中没有 bool 类型,因此使用带有 0 或 1 的 int,或者更理想的是,两个符号常量,如 INSIDE_COMMENTOUTSIDE_COMMENT)。

#define 用于常量(非宏)

如果你遇到任何以#开头的行,显然你不应该把它写出来。如果您找到#define指令,请将符号名称和值存储在某处(都是字符串),从那时起,在输入中查找名称,并在每次查找时写出值被发现。您可以设置常量名称的最大长度,我认为这是 C 中的 6 个字符,并且始终检查输入中的 6 个字符。如果 6 个字符以已知常量名称开头,则写出该值。

#ifdef 和 #endif

创建一个 bool 标志来指示您是否位于#ifdef内,就像注释一样。当找到#ifdef时,检查您是否已经存储了常量名称,并根据该名称写入输出。

我希望这会有所帮助。

编辑:另请阅读 gs 的评论!

关于C 预处理器 - 家庭作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/574362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com