Язык программирования C++ для профессионалов


Множественные заголовочные файлы - часть 2


// lex.h: описания для ввода и лексического анализа

enum token_value { NAME, NUMBER,END, PLUS='+', MINUS='-', MUL='*', PRINT=';', ASSIGN='=', LP='(', RP= ')' };

extern token_value curr_tok; extern double number_value; extern char name_string[256];

extern token_value get_token();

Интерфейс с лексическим анализатором достаточно запутанный. Поскольку недостаточно соответствующих типов для лексем, пользователю функции get_token() предоставляются те же буферы number_value и name_string, с которыми работает сам лексический анализатор.

// lex.c: определения для ввода и лексического анализа

#include <iostream.h> #include <ctype.h> #include "error.h" #include "lex.h"

token_value curr_tok; double number_value; char name_string[256];

token_value get_token() { /* ... */ }

Интерфейс с синтаксическим анализатором определен четко:

// syn.h: описания для синтаксического анализа и вычислений

extern double expr(); extern double term(); extern double prim();

// syn.c: определения для синтаксического анализа и вычислений

#include "error.h" #include "lex.h" #include "syn.h"

double prim() { /* ... */ } double term() { /* ... */ } double expr() { /* ... */ }

Как обычно, определение основной программы тривиально:

// main.c: основная программа

#include <iostream.h> #include "error.h" #include "lex.h" #include "syn.h" #include "table.h"

int main(int argc, char* argv[]) { /* ... */ }

Какое число заголовочных файлов следует использовать для данной программы зависит от многих факторов. Большинство их определяется способом обработки файлов именно в вашей системе, а не собственно в С++. Например, если ваш редактор не может работать одновременно с несколькими файлами, диалоговая обработка нескольких заголовочных файлов затрудняется. Другой пример: может оказаться, что открытие и чтение 10 файлов по 50 строк каждый занимает существенно больше времени, чем открытие и чтение одного файла из 500 строк. В результате придется хорошенько подумать, прежде чем разбивать небольшую программу, используя множественные заголовочные файлы. Предостережение: обычно можно управиться с множеством, состоящим примерно из 10 заголовочных файлов (плюс стандартные заголовочные файлы). Если же вы будете разбивать программу на минимальные логические единицы с заголовочными файлами (например, создавая для каждой структуры свой заголовочный файл), то можете очень легко получить неуправляемое множество из сотен заголовочных файлов.




Начало  Назад  Вперед



Книжный магазин