Но будьте осторожны: опознать идентичность
// file1.c: struct S { int a; char b; }; extern void f(S*);
// file2.c: struct S { int a; char b; }; void f(S* p) { /* ... */ }
Но будьте осторожны: опознать идентичность двух описаний класса не в состоянии большинство систем программирования С++. Такое дублирование может вызвать довольно тонкие ошибки (ведь классы в разных файлах будут считаться различными).
Глобальные функции-подстановки подлежат внутреннему связыванию, и то же по умолчанию справедливо для констант. Синонимы типов, т.е. имена typedef, локальны в своем файле, поэтому описания в двух данных ниже файлах не противоречат друг другу:
// file1.c: typedef int T; const int a = 7; inline T f(int i) { return i+a; }
// file2.c: typedef void T; const int a = 8; inline T f(double d) { cout<<d; }
Константа может получить внешнее связывание только с помощью явного описания:
// file3.c: extern const int a; const int a = 77;
// file4.c: extern const int a; void g() { cout<<a; }
В этом примере g() напечатает 77.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий