Re: inline или static?
От: MasterZiv СССР  
Дата: 24.07.08 16:45
Оценка:
Rockoos пишет:

> У меня тут возник один вопрос, на который из моих знакомы уверенно так

> никто и не ответил...
>
> Если объявить функцию inline в хедере, а реалезовать ее в cpp файле,
> будет ли функции после компиляции inline или компилятор сделает ее static?
>

Будет. Другой вопрос — что вы имеете в виду под
"функция будет inline". Я — что это функция, у которой есть модификатор inline.

> Вопрос возник из таких размышлений, допустим у меня есть три файла:


> inline функция прямой подстановки, допустим finline.cpp скомпилировался

> в объектник первым, при компиляции main.cpp компилятор подставит
> finline.h в main.cpp и скомпилирует main.obj. Но дело в том, что тело
> f() находится в finline.cpp, который уже скомпилирован и соотведственно
> по логике вещей никакой подстановки произойти не должо и линкер просто
> должен подставить адрес f() при линковке.

я что-то не понимаю. Если по вашей версии inline -функция — это функция
прямой подстановки, то при чем тут вообще линкер ?
До линкера функция дойти не должна уже, если она подставляется.
Тело компилятор подставляет (ну хотя бы как правило).

Из этого следует вопрос inline
> должна быть полностью реализованна в хедере?

Не обязательно, почему же ? Вот в том модуле, где она
определена, она будет как inline и возможно будет подставлена.
Если не подставлена, она не будет помещена в словарь глобальных
имен.

А в том модуле, где она не определена, ссылка на неё будет
сгенерена, и она потом в процессе линковки должна будет
разрешена линкером из словаря глобальных имён. Другое
дело, что вероятнее всего она там не будет найдена
линкером. Но это уже — дело десятое.

А, вы там написали, что она уже в хедере как inline описана...
Ну тогда она просто должна не найтись в каждом модуле,
использующем этот заголовок (и вызывающем функцию, естественно).
И все.
Posted via RSDN NNTP Server 2.1 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.