Объявление переменного числа переменных перед обработкой файла - PullRequest
0 голосов
/ 21 сентября 2018

Я студент первого курса университета, которому недавно было поручено в качестве единичного проекта для университета задание, которое включало создание программы с именем 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
                }
            }
        }
    }
 }

Очевидно, что при реализации вышеприведенный код будет поддерживать только одну подстановку переменных.

Итак, мои вопросы:

Как выобъявлять переменное число переменных, не зная, сколько определений переменных существует внутри бейкфайла?

Как вы определяетефункция с переменным числом параметров?

Прошу прощения, если этот вопрос слишком многословен;Я не знаю, с чего начать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...