我是大学一年级的学生,最近被分配为uni的单元项目,该任务涉及创建一个用C编写的名为 bake 的程序,该程序可以实现众所周知的 make 提供的功能的一小部分。此 bake 功能将从面向行的文本文件中读取项目依赖关系的详细信息,并通常按 make 进行处理。
Here是指向项目详细信息的链接,如果有人有兴趣阅读的话。
我才刚刚开始处理这个项目,我的第一个倾向是打开bakefile(规格文件的合适名称),然后逐行读取它,而忽略注释行(以井号'#'开头)和处理非注释行。然后,我将在bakefile中寻找变量定义。这是我的第一个问题:
我们知道, make 支持简单的变量定义和替换,通过该定义和替换,可以在一系列变量中定义常见信息,随后将这些变量替换回到目标,依赖关系或行动方面。
意识到烘焙文件可能具有0个或多个变量替换的事实,我想为原始烘焙文件中的每个声明的变量替换定义一个局部变量。我决定编写一个单独的函数 processFile ,该函数采用一个参数,即打开的文件(FILE * bakefile),并依次处理每一行。
但是,我不知道要初始化多少个变量来存储bakefile中给出的变量定义,并且我不确定如何定义一个带有可变数量参数的函数,我可能会使用在processFile函数的外部,以一次一次将变量替换回原始文件中。
我正在计划伪代码中的 processFile 函数,如果它对寻找我的思维过程的人有帮助(尚未完成):
void processFile(FILE* bakefile) {
for (each line (i) in bakefile) {
char bakeline[] = line i of bakefile
if (line i starts with '#' character) continue;
for (int j in bakeline) {
char var[1000];
if (bakeline[j] == '=') {
for (int k = j; k != '\n'; k++) {
store in var the string form of whatever came after the equals ('=') sign
}
}
}
}
}
很明显,如果实施,上面的代码将仅支持一个变量替换。
所以我的问题是:
如何在不知道bakefile中存在多少变量定义的情况下声明可变数量的变量?
如何定义具有可变数量参数的函数?
如果这个问题过于冗长,我深表歉意。我不知道该从哪里开始。