[с++] static

Maurog

мне тут сообщили сегодня, что статическая функция, написанная в одном .cpp не будет видна в другом .cpp, если ее там объявить
extern int stat_func;
то есть при сборке проекта второй объектник потеряется чтоли?
короче действует только для статических штуковин
вы согласны с этим? может, кто-нибудь проверял?:)

ppplva

static перед функцией (_не_ методом класса) означает, что ее область видимости ограничивается файлом. То есть она не попадет в таблицу символов, и при линковке случится unresolved symbol.

Maurog

во
мне как раз такое говорили, но речь шла о методе класса
вот метод можно увидеть в другом файле?

ppplva

Методы не могут иметь static linkage, по крайней мере так считает gcc 3.3.4
Зато его удается наипать с помощью волшебного слова inline, и получить-таки unresolved symbol
Как-то он непоследовательно себя ведет. Может баг в компиляторе ?

Defolt1

Это непринципиально, но статическая функция попадёт в таблицу символов; только она будет представлена локальным, а не глобальным символом. Поэтому и не увидится извне своего блока компиляции.

rosali

но статическая функция попадёт в таблицу символов
Ясное дело Как иначе линковщик ее прилинкует?
только она будет представлена локальным, а не глобальным символом
А вот про такие тонкости формата .o я не знал, думал просто имя ей генерируется уникальное и все.

ppplva

Ясное дело Как иначе линковщик ее прилинкует?
Вообще говоря, она не обязана даже быть отдельной функцией. Если извне функцию никто не увидит, то компилятор может ее заинлайнить.
Оставить комментарий
Имя или ник:
Комментарий: