- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
作业:
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:
- Stripping off of comments
#ifdef
and#endif
#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_COMMENT
和OUTSIDE_COMMENT
)。
#define 用于常量(非宏)
如果你遇到任何以#开头的行,显然你不应该把它写出来。如果您找到#define
指令,请将符号名称和值存储在某处(都是字符串),从那时起,在输入中查找名称,并在每次查找时写出值被发现。您可以设置常量名称的最大长度,我认为这是 C 中的 6 个字符,并且始终检查输入中的 6 个字符。如果 6 个字符以已知常量名称开头,则写出该值。
#ifdef 和 #endif
创建一个 bool 标志来指示您是否位于#ifdef
内,就像注释一样。当找到#ifdef时,检查您是否已经存储了常量名称,并根据该名称写入输出。
我希望这会有所帮助。
编辑:另请阅读 gs 的评论!
关于C 预处理器 - 家庭作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/574362/
当我同时定义两条指令时,如何做到这一点,我会收到编译错误? 在这里我想要错误 #define ENG #define POL #if defined POL #if defined ENG 这里没有
我有actix-web,并且调试困难,因为记录器仅在最后写入,如果出现故障,则根本不会写入。RUST_LOG=actix_web=debug,actix_server=debug let server
对于以下有关数据预处理聚类的问题,我很困惑,在互联网上找不到令人信服的答案。 根据Python documentation ,当我们使用 sckit learn 库中的内置命令进行预处理时,假设数据被
我无法理解预处理器的工作原理以及 ## 在这个特定示例中代表什么 #include #define TEMP_KEY(type,Key) (TEMP_##type | Key) enum TEMPK
我一直在尝试对 Kaggle 上的 Sentiment140 数据库进行一些预处理:https://www.kaggle.com/kazanova/sentiment140 我使用的代码是这样的: i
例如,考虑在 Keras 中微调 Resnet50 模型。 For example here : from keras.applications.resnet50 import ResNet50 fr
我想预处理 JavaScript 属性名称以将其转换为 { 'extension': object, 'config': {id: 1} } 到 { extension: object,
我在编译 C 程序时在预处理步骤中遇到错误。 奇怪的是,我可以运行预处理而没有错误或警告: gcc -I/usr/local/libpng-1.6.24/include -Wall -std=c99
我很好奇 GCC 预处理步骤的输出。更准确地说,以下两行的目的是什么: # 1 "" # 1 "" 我知道格式是 但我不明白本节中可能会出现什么类型的数据。它的目的是什么? 谢谢! 最佳答案 目的是
我需要能够预处理多个 C# 文件作为项目的预构建步骤,检测方法的开始,并在方法开始处插入生成的代码,在任何现有代码之前。但是,我在检测方法的打开时遇到问题。我最初尝试了一个正则表达式来匹配,但最终出现
如何使用 C 预处理自动生成以下代码模式(访问器)? // Immutable accessor. const auto& member1 () const { return _member1;
我正在考虑分两个阶段实现 C 预处理器,其中第一阶段将源文件转换为预处理标记数组。这对于简单性和性能都有好处,因为当项目中的多个文件包含头文件时,不需要重做标记化工作。 障碍: #define f(x
有没有办法“预处理”C99 样式的二合字母以获得 C 文件(或 .i 预处理源),使得生成的文件不包含任何二合字母? 例如,给出以下源代码: %:define N 5 int main() = ;
如何使用 browserify 预处理函数调用? 在一个大的 js 文件中,有时我需要将一个 JSON 对象传递给一个变量,但这个 JSON 对象只能通过函数调用创建: var myvar = Rac
我正在对电视镜头中的字幕应用 OCR。 (我正在使用带 C++ 的 Tesseact 3.x)我正在尝试拆分文本和背景部分作为 OCR 的预处理。 这是原图: 然后,预处理图像: OCR结果为:Sic
我正在开发一个函数,该函数采用众所周知的参数范围,但我不想为每种情况编写许多不同的函数。有没有一种方法可以定义函数的“模式”并使预编译器根据这种模式生成函数? 例子。我有以下功能: int addit
我有一个包含多个脚本标签(接近 20 个)的 html 文件。我决定将所有 JS 文件连接成一个文件,然后缩小连接后的文件。我正在使用 ant 任务来连接并将这样做以进行缩小。我知道我需要提供非串联/
我想在 AngularJS 更新任何 HTML 之前添加一个预处理步骤。为了简单起见,让我们将 hello 的所有实例都加粗。 . 也就是说,如果我们让$scope.text = "hello wor
我正在使用 tess4j 作为来自 JAVA 的 tesseract 的包装器对图像运行一系列 OCR。 ocr 的过程仍然需要大量时间(有时甚至 5 秒),我正在努力加快它的速度。 我正在对图像进行
我一直在阅读有关 Phing 和 Ant 的文章,但我不确定这些工具中哪一个(如果有的话)对这种情况最有用。 它很容易是调试语句等,但我会给你我们的字面扫描。 我们有一个可下载的 PHP 应用程序的免
我是一名优秀的程序员,十分优秀!