Я студент первого курса университета, которому недавно было поручено в качестве единичного проекта для университета задание, которое включало создание программы с именем bake , написанной на C, которая должна была реализоватьНебольшое подмножество функциональных возможностей, предоставляемых известным , составляют .Эта функция bake будет считывать подробности зависимостей проекта из строкового текстового файла и обрабатывать их так, как обычно make .
Здесь это ссылка на детали проекта, если кто-то заинтересован в их просмотре.
Я только начал заниматься этим проектом, и первым делом я хотел открыть 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
}
}
}
}
}
Очевидно, что при реализации вышеприведенный код будет поддерживать только одну подстановку переменных.
Итак, мои вопросы:
Как выобъявлять переменное число переменных, не зная, сколько определений переменных существует внутри бейкфайла?
Как вы определяетефункция с переменным числом параметров?
Прошу прощения, если этот вопрос слишком многословен;Я не знаю, с чего начать.