不知道你到底不明白什么并不容易回答,但无论如何我都会尝试,使用我非常有限的 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
只有在之前定义了常量时,才会包含#ifdef
和之间的行。#endif
WINDOWS
我希望现在你对你的程序应该做什么有了一些想法。
实现“最小功能”的提示
在这里,我将为您提供一些关于如何编写教授所需的最低功能的想法。这些只是我的想法,所以请先考虑一下。
剥离评论
在阅读输入时,寻找“ /*
”。当你遇到它时,停止写入输出,然后当你找到“ */
”时,你可以重新开始写入。使用布尔标志来指示您是否在注释中(AFAIK,C 中没有 bool 类型,因此请使用带有 0 或 1 的 int,或者更理想的是使用两个符号常量,如INSIDE_COMMENT
和OUTSIDE_COMMENT
)。
#define 用于常量(不是宏)
如果你遇到任何以#开头的行,显然你不应该把它写出来。如果找到#define
指令,请将符号名称和值存储在某处(两个字符串),然后在输入中查找名称,并在每次找到时写出值。您可以为常量名称设置最大长度,我认为这是 C 中的 6 个字符,并且始终从输入中检查 6 个字符。如果这 6 个字符以已知常量名称开头,则改为写出该值。
#ifdef 和 #endif
创建一个布尔标志来指示您是否在 内部#ifdef
,就像注释一样。查找时#ifdef
,检查您是否已经存储了常量名称,并根据该名称写入输出。
我希望这有帮助。
编辑:还阅读 gs 的评论!