Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> определение функции в классе 
V
    Опции темы
17dufa
Дата 2.11.2009, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: 3
Всего: 5



Добрый день.
Собственно интересует такой вопрос - а почему на определенные в рамках класса функции не ругается линкер, что они already defined? это просто требование стандарта или такое определение чем-то концептуально отличается от определения просто функции?
то есть вот такое линкуется
Код

//A.h
class A
{
public:
int f(int i)
{
return ++i;
}
};
//1.cpp
#include "A.h"
....
//2.cpp
#include "A.h"
.....

а вот такое нет
Код

//A.h
int f(int i)
{
return ++i;
}
//1.cpp
#include "A.h"
....
//2.cpp
#include "A.h"
....

*ну и то же самое для
Код

//A.h
class A
{
public:
int f(int i);
};
int A::f(int i)
{
return ++i;
}
//1.cpp
#include "A.h"
....
//2.cpp
#include "A.h"
....

PM MAIL   Вверх
Alek86
Дата 2.11.2009, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



насколько я помню, функции, реализованные внутри класса, считаются inline
если во втором случае ты перед функцией int f(int i) напишешь слово inline, то он тоже будет линковаться


--------------------
user posted image    user posted image
PM MAIL   Вверх
17dufa
Дата 2.11.2009, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: 3
Всего: 5



Alek86, точно. никак не мог подумать, что inline влияет на линковку, хотя это закономерно, если с минуту поразмышлять.
PM MAIL   Вверх
azesmcar
Дата 2.11.2009, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Alek86,
правильно помнишь.

Цитата

A member function may be defined (8.4) in its class definition, in which case it is an inline member function
(7.1.2), or it may be defined outside of its class definition if it has already been declared but not
defined in its class definition.


Цитата

An inline function shall be defined in every translation unit in which it is used and shall have exactly the
same definition in every case (3.2)


PM   Вверх
FCM
Дата 2.11.2009, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: нет
Всего: 9



Цитата(azesmcar @  2.11.2009,  10:59 Найти цитируемый пост)
An inline function shall be defined in every translation unit in which it is used and shall have exactly the
same definition in every case (3.2)


Но компилятор (Microsoft) не будет ругаться, если в двух единицах трансляции определены две одноименные inline функции с одинаковым прототипом (declaration), но  с разными реализациями (definition). У них же разные области видимости. 
Некорректности проявляются только на этапе выполнения такой программы.

PM MAIL   Вверх
azesmcar
Дата 2.11.2009, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(FCM @  2.11.2009,  15:09 Найти цитируемый пост)
Но компилятор (Microsoft) не будет ругаться, если в двух единицах трансляции определены две одноименные inline функции с одинаковым прототипом (declaration), но  с разными реализациями (definition). У них же разные области видимости. 
Некорректности проявляются только на этапе выполнения такой программы.

1. То, что микрософт не ругается еще ни о чем не говорит.
2. Это не отменяет вышесказанного.
PM   Вверх
FCM
Дата 2.11.2009, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: нет
Всего: 9



Но все-таки inline-функции не обладают внешними связями и не могут непосредственно видеть друг друга (если определены в разных единицах трансляции), или я ошибаюсь?

Это сообщение отредактировал(а) FCM - 2.11.2009, 15:29
PM MAIL   Вверх
azesmcar
Дата 2.11.2009, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(FCM @  2.11.2009,  15:28 Найти цитируемый пост)
Но все-таки inline-функции не обладают внешними связями и не могут непосредственно видеть друг друга (если определены в разных единицах трансляции), или я ошибаюсь?


инлайн функции ДОЛЖНЫ быть определены во всех единицах трансляции, в которых они используются и если функция со вшешним связыванием объявлена инлайн - она должна быть объявлена инлайн во всех единицах трансляции, в которых используется. А само ключевое слово инлайн на linkage функции никак не влияет.
PM   Вверх
17dufa
Дата 2.11.2009, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: 3
Всего: 5



azesmcar, "А само ключевое слово инлайн на linkage функции никак не влияет." Можно подробнее? Я, к сожалению, ни слова не понял.
PM MAIL   Вверх
bsa
Дата 2.11.2009, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



FCM, ключевое слово "inline" - это всего лишь рекомендация компилятору и указание, что данная функция может быть определена в нескольких единицах трансляции. Т.е. если ты пометил функцию встраиваемой, это совсем не значит, что она будет встроена (особенно, в режиме отключенной оптимизации).
PM   Вверх
azesmcar
Дата 2.11.2009, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



17dufa

про linkage
http://www.cyberguru.ru/programming/cpp/cp...way-page25.html

Добавлено через 1 минуту и 40 секунд
Цитата(bsa @  2.11.2009,  15:48 Найти цитируемый пост)
Т.е. если ты пометил функцию встраиваемой, это совсем не значит, что она будет встроена (особенно, в режиме отключенной оптимизации). 

более того, даже если она будет встраиваемой в одном участке кода, это не значит что она встраиваемая всегда. Встраивается вызов функции.
PM   Вверх
17dufa
Дата 2.11.2009, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: 3
Всего: 5



azesmcar,  несколько вопросов: 
1. inline и внешнее/динамическое связывание - это как? 
2. возвращаясь к первому вопросу, если компилятор положит на inline и таки сгенерит функцию, вернутся ошибки линковки или компилятор будет генерить функцию очень специальным образом?
PM MAIL   Вверх
azesmcar
Дата 2.11.2009, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(17dufa @  2.11.2009,  15:58 Найти цитируемый пост)
1. inline и внешнее/динамическое связывание - это как? 

В каком смысле? Обыкновенная функция со внешним связыванием, просто с ключевым словом inline. Я же говорю, инлайн с linkage никак не влияет.
Цитата

The inline keyword has no effect on the linkage of a function


Цитата(17dufa @  2.11.2009,  15:58 Найти цитируемый пост)
2. возвращаясь к первому вопросу, если компилятор положит на inline и таки сгенерит функцию, вернутся ошибки линковки или компилятор будет генерить функцию очень специальным образом? 

нет, ошибок не будет

http://forum.vingrad.ru/forum/topic-275681...tion/index.html
последние 3 сообщения.


Это сообщение отредактировал(а) azesmcar - 2.11.2009, 16:55
PM   Вверх
FCM
Дата 2.11.2009, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: нет
Всего: 9



В этих последних 3-х сообщениях есть такие слова
"Однако при помощи inline можно влиять на способ компоновки."
Это утверждение ошибочно ?

И еще "инлайн функции не подчиняются ему (OneDefinitionRule)".
Это так?
PM MAIL   Вверх
bsa
Дата 2.11.2009, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



проще говоря, если компилятор видит inline функцию, то он обрабатывает ее обычным образом, плюс, в тех местах, где считает необходимым, он встраивает ее тело вместо вызова...
PM   Вверх
FCM
Дата 2.11.2009, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: нет
Всего: 9



Вот цитата с 
http://msdn.microsoft.com/en-us/library/z8y1yy88(VS.71).aspx

Functions that are declared as inline, and that are not class member functions, have internal linkage unless otherwise specified.

Что же есть на самом деле?
PM MAIL   Вверх
bsa
Дата 2.11.2009, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



имеется в виду, думаю, то что inline функции не члены классов не экспортируются из dll библиотек.
PM   Вверх
17dufa
Дата 3.11.2009, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: 3
Всего: 5



azesmcar, мое понимание все уменьшается и уменьшается. итак inline - это рекомендация компилятору. он имеет право на нее покласть и в целом обрабатывает inline функции обычным образом, хотя и старается по возможности встроить вызовы таких функций. тогда вопрос - почему нет ошибок линковки вида "already defined"? может все-таки не совсем обычным образом, какой-то флажок что ли ставит или еще чего такое незаметное делает, чтоб линкер с ума не сходил?
и возвращаясь в вопросу о dll. 
в этом объявлении
Код

__declspec(dllexport)  inline int а();

на inline будет положено в 100% случаев (мелкософт такое компилит даже без варнингов)?
PM MAIL   Вверх
azesmcar
Дата 3.11.2009, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(17dufa @  3.11.2009,  11:15 Найти цитируемый пост)
тогда вопрос - почему нет ошибок линковки вида "already defined"? 

потому что inline функция должна быть объявлена во всех единицах трансляции, в которых используется, вот она и объявлена, все соответствует стандарту, в чем проблема?

Цитата(17dufa @  3.11.2009,  11:15 Найти цитируемый пост)
может все-таки не совсем обычным образом, какой-то флажок что ли ставит или еще чего такое незаметное делает, чтоб линкер с ума не сходил?

не знаю что там конкретно делает компилятор, флажок или что-то там другое, но ошибки он не должен выдавать.

Цитата(17dufa @  3.11.2009,  11:15 Найти цитируемый пост)
на inline будет положено в 100% случаев 

нет, с чего вдруг?
PM   Вверх
mes
Дата 3.11.2009, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(17dufa @  3.11.2009,  10:15 Найти цитируемый пост)
, мое понимание все уменьшается и уменьшается. итак inline - это рекомендация компилятору. он имеет право на нее покласть и в целом обрабатывает inline функции обычным образом, хотя и старается по возможности встроить вызовы таких функций. 

Вы рассматриваете вопрос односторонне  :
  inline это не только рекомендация встраивания, а также указание способа компоновки функции, которое компилятор (а в последствии линкер) не могут проигнорировать.




--------------------
PM MAIL WWW   Вверх
xvr
Дата 3.11.2009, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(bsa @ 2.11.2009,  17:25)
проще говоря, если компилятор видит inline функцию, то он обрабатывает ее обычным образом, плюс, в тех местах, где считает необходимым, он встраивает ее тело вместо вызова...

Уточнение для топикстартера - под 'обработкой обычным образом' понимается обработка с точки зрения синтаксиса и семантики языка С++. Оттранслированное тело функции (если компилятор такое создаст) будет помещено в объектный файл особым образом, что бы линкер не ругался на множественные определения таковых функций. 
Пример - 
Код

extern inline int func(int a) {return a+10;}

int (*f)(int) = &func;

Компиляция
Код

g++ -c -ffunction-sections ~/test.cxx

объектник
Код

test.o:     file format elf64-x86-64
test.o
architecture: i386:x86-64, flags 0x00000011:
HAS_RELOC, HAS_SYMS
start address 0x0000000000000000
 
Sections:
Idx Name          Size      VMA               LMA               File off  Algn
  0 .text         00000000  0000000000000000  0000000000000000  00000040  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000008  0000000000000000  0000000000000000  00000040  2**3
                  CONTENTS, ALLOC, LOAD, RELOC, DATA
  2 .bss          00000000  0000000000000000  0000000000000000  00000048  2**2
                  ALLOC
  3 .gnu.linkonce.t._Z4funci 0000000f  0000000000000000  0000000000000000  00000048  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE, LINK_ONCE_DISCARD
  4 .eh_frame     00000048  0000000000000000  0000000000000000  00000058  2**3
                  CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
  5 .note.GNU-stack 00000000  0000000000000000  0000000000000000  000000a0  2**0
                  CONTENTS, READONLY
  6 .comment      0000002d  0000000000000000  0000000000000000  000000a0  2**0
                  CONTENTS, READONLY
SYMBOL TABLE:
0000000000000000 l    df *ABS*  0000000000000000 test.cxx
0000000000000000 l    d  .text  0000000000000000 
0000000000000000 l    d  .data  0000000000000000 
0000000000000000 l    d  .bss   0000000000000000 
0000000000000000 l    d  .gnu.linkonce.t._Z4funci       0000000000000000 
0000000000000000 l    d  .eh_frame      0000000000000000 
0000000000000000 l    d  .note.GNU-stack        0000000000000000 
0000000000000000 l    d  .comment       0000000000000000 
0000000000000000 g     O .data  0000000000000008 f
0000000000000000  w    F .gnu.linkonce.t._Z4funci       000000000000000f _Z4funci
0000000000000000         *UND*  0000000000000000 __gxx_personality_v0
 
 
RELOCATION RECORDS FOR [.data]:
OFFSET           TYPE              VALUE 
0000000000000000 R_X86_64_64       _Z4funci
 
 
RELOCATION RECORDS FOR [.eh_frame]:
OFFSET           TYPE              VALUE 
0000000000000011 R_X86_64_64       __gxx_personality_v0
0000000000000028 R_X86_64_64       .gnu.linkonce.t._Z4funci
 
Обратите внимание на секцию 3:
Цитата

 3 .gnu.linkonce.t._Z4funci 0000000f  0000000000000000  0000000000000000  00000048  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE, LINK_ONCE_DISCARD

это оно и есть

PM MAIL   Вверх
azesmcar
Дата 3.11.2009, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



xvr

ну теперь я думаю вопросов поубавиться smile 

Это сообщение отредактировал(а) azesmcar - 3.11.2009, 12:42
PM   Вверх
17dufa
Дата 3.11.2009, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: 3
Всего: 5



azesmcar, 
Цитата(azesmcar @  3.11.2009,  12:08 Найти цитируемый пост)
потому что inline функция должна быть объявлена во всех единицах трансляции, в которых используется, вот она и объявлена, все соответствует стандарту, в чем проблема?

а компилятор позволяет не inline функции не объявлять в единицах трансляции, где они используются?

Цитата(azesmcar @  3.11.2009,  12:08 Найти цитируемый пост)

на inline будет положено в 100% случаев 

нет, с чего вдруг? 

я имею в виду работу компилятора по билду аппликайшена, использующего подобную библиотеку. не будет же компилятор бегать по длл в поисках объектного кода и пытаться его встроить?

xvr, полегчало. спасибо. Интересно какие правила использует линкер для устранения конфликта имен?


PM MAIL   Вверх
azesmcar
Дата 3.11.2009, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(17dufa @  3.11.2009,  13:07 Найти цитируемый пост)
а компилятор позволяет не inline функции не объявлять в единицах трансляции, где они используются?

имелось ввиду "определять" а не "объявлять".

Цитата(17dufa @  3.11.2009,  13:07 Найти цитируемый пост)

я имею в виду работу компилятора по билду аппликайшена, использующего подобную библиотеку. не будет же компилятор бегать по длл в поисках объектного кода и пытаться его встроить?

Ну эта инлайн функция еще может быть использована внутри самой библиотеки, это раз, и во вторых встраивать бинарный код никто не запрещает, другое дело что вряд ли кто либо этим будет заниматься. smile 
PM   Вверх
17dufa
Дата 3.11.2009, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: 3
Всего: 5



azesmcar, думаю известным мне компиляторам даже при сильном желании не удастся вытащить код из dll, так как эти самые dll указываются как параметры линкера, компилятору про них неизвестно. Но стандарт не запрещает написать компилятор, который тем не менее это сделает (и соответственно потребует доп параметров с указанием dll)?
Если в каждой единице трансляции будет определена inline функция, то я так понимаю для них будет использоваться статическое внутреннее связывание, и линкер по их поводу ваще не парится, то есть LINK_ONCE_DISCARD может как вариант приводить к тому, что подобные функции просто не будут включатся линкером в список имен. И далее рассуждая получаю, что статическое внешнее и динамические связывания для inline функций - это что-то из разряда юзанья их из lib и dll библиотек, то есть те самые случаи, когда слово inline по жизни не имеет эффекта (опустим тот факт, что оно могло оказать эффект при сборке этих lib, dll, меня в данный момент интересует аппликайшин, использующих эти библиотеки).
PM MAIL   Вверх
xvr
Дата 3.11.2009, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



По поводу вставки inline на этапе линковки. Почти все современные компиляторы имеют режим трансляции, когда при трансляции отдельных модулей генерируется только промежуточное представление модуля, которое помещается в объектный файл вместо (а иногда и вместе) с кодом. На этапе линковки это представление извлекается из объектников (всех) и скармливается компилятору. При таком подходе компилятор имеет возможность заинлайнить все и везде  smile 
NB. Режим этот у всех называется по разному, и включается разными опциями.

PM MAIL   Вверх
17dufa
Дата 3.11.2009, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: 3
Всего: 5



xvr, класс. прям чую как умнею. главное не рехнуться smile 
PM MAIL   Вверх
azesmcar
Дата 3.11.2009, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



17dufa

Почитай Герба Саттера - More Exceptional C++, там подробно написано про inline.

PM   Вверх
17dufa
Дата 3.11.2009, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: 3
Всего: 5



azesmcar, как раз ищу его. после эйфории от первой части. наверно, стоит не мучаться, да распечатать то, что в электронном виде лежит.
PM MAIL   Вверх
bsa
Дата 3.11.2009, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



17dufa, когда ты подключаешь хидер (с inline функцией) к исходникам приложения, то компилятор может встроить ее тело... А может и не встроить. В любом случае, он сгененирует "невстроенный" вариант этой функции. Затем, на этапе линковки, все не нужные экземпляры невстроенной функции будут заменены на ту, что предоставляет dll.
PM   Вверх
FCM
Дата 6.11.2009, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: нет
Всего: 9



Возвращаясь к вопросу о влиянии inline на linkage - все-таки дыма без огня не бывает- оказывается раньше влияло:

In the original C++ language, inline functions always had internal linkage. Then a change was made to allow the possibility of external linkage. Now a change has been made to make external linkage the default. This may alter the behavior of some existing code.
PM MAIL   Вверх
17dufa
Дата 6.11.2009, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: 3
Всего: 5



bsa, ну в моем хидере может не быть определения функции, а только объявление smile 
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0811 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.