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


Связывание - часть 2


// 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.

on_load_lecture()

Дальше »

  Если Вы заметили ошибку - сообщите нам.  

Страницы:

1

|

2

|

3

|

4

|

5

|

6

|

7

|

8

|

9

|

вопросы | »

|

учебники

|

для печати и PDA


Курсы | Учебные программы | Учебники | Новости | Форум | Помощь



Телефон: +7 (495) 253-9312, 253-9313, факс: +7 (495) 253-9310, email: info@intuit.ru

© 2003-2007, INTUIT.ru::Интернет-Университет Информационных Технологий - дистанционное образование




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



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