Языки программирования - концепции и принципы

в том смысле, что результат


    Компиляция в языке С независима в том смысле, что результат одной ком­пиляции не сохраняется для использования в другой. Если кто-то из вашей группы случайно напишет:

         /* File func.c */

extern float global;                                   /* Внешняя, только объявление */

int func(int parm)                                     /* Внешняя по умолчанию */

{

return parm + global;

}

программа все еще может быть откомпилирована и скомпонована, а ошибка произойдет только во время выполнения. На моем компьютере целочисленное значение 4, присвоенное переменной global в main, воспринимается в файле func.c как очень малое число с плавающей точкой; после обратного преобразо­вания к целому числу оно становится нулем, и функция возвращает 4, а не 8.

    Как и в языке Fortran, проблему можно частично решить, используя вклю­чаемые файлы так, чтобы одни и те же объявления использовались во всех файлах. И объявление extern для функции или переменной, и определение могут появиться в одном и том же вычислении. Поэтому мы помещаем все внешние объявления в один или несколько включаемых файлов, в то время как единственное определение для каждой функции или переменной будет содержаться не более чем в одном файле «.с»:

              /* File main.h */

extern int global;                                           /* Только объявление */

             /* File func.h */

extern int func(int parm);                             /* Только объявление */



             /* File main.c */

#include "main.h"

#include "func.h"

int global;                                                      /* Определение */

int main(void)

{

      return func(global) + 7;

}

          /* File func.c */

#include "main.h"

#include "func.h"

int func(int parm)                                        /* Определение */

{

      return parm + global;

}

Спецификатор static

Забегая вперед, мы теперь покажем, как в языке С можно использовать свой­ства декомпозиции для имитации конструкции модуля других языков.

Содержание раздела