Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.08.2013, 10:52   #1
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию Типы линковки

Здравствуйте!
Хотелось бы прояснить - почему еденица трансляции, определенная с ключевым словом static, будучи членом класса, компонуется внешне?
Igor95 вне форума Ответить с цитированием
Старый 02.08.2013, 11:18   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

почему еденица трансляции, определенная с ключевым словом static, будучи членом класса, компонуется внешне?

а как надо?
Rififi вне форума Ответить с цитированием
Старый 02.08.2013, 11:59   #3
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Если с в области видимости файла, то еденица трансляции со словом static компонуется внутренне.
Igor95 вне форума Ответить с цитированием
Старый 02.08.2013, 12:16   #4
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

если ты таки откроешь страуструпа - то можешь там заметить, что он ваще не рекомендует использовать static кроме как для переменных внутри функции и методов класса, т.е. вот так он не рекомендует использовать:
Цитата:
Если с в области видимости файла, то еденица трансляции со словом static компонуется внутренне.
Статический метод - это метод, который может использоваться без создания объекта (на него есть куча ограничений кнешно, он вещь не может обрашаться к нестатическим полям и методам).
Типа
Код:
class A {
  static int f() { return 1; } // правильно
};
//...
A::f(); // вернет 1
Я статику ваще стараюсь не использовать - только синглетон - и-то без него можно обойтись чаще всего. Страуструп грит, что исопльзовать статическую переменную вместо глобальной переменной разумно (ну вцелом да, это к сигнлетонам и относится, в том числе), но все равно это плохо )

А на компановку вроде бы это не влияет никак (статический член класса)
rrrFer вне форума Ответить с цитированием
Старый 02.08.2013, 12:35   #5
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Просто я вычитал на msdn, что если, член класса статический, то компоновка этой еденицы трансляции внешняя. Было интересно узнать почему именно внешняя, если такие еденицы трансляции обычно компонуются внутренне.
Igor95 вне форума Ответить с цитированием
Старый 03.08.2013, 13:20   #6
frommars
Форумчанин
 
Регистрация: 02.07.2011
Сообщений: 144
По умолчанию

Цитата:
Сообщение от Igor95 Посмотреть сообщение
Просто я вычитал на msdn, что если, член класса статический, то компоновка этой еденицы трансляции внешняя. Было интересно узнать почему именно внешняя, если такие еденицы трансляции обычно компонуются внутренне.
Оффтоп
Потому что мелкософт
frommars вне форума Ответить с цитированием
Старый 03.08.2013, 14:31   #7
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от frommars Посмотреть сообщение
Оффтоп
Потому что мелкософт
Мсье дурак или мсье шутит?
waleri вне форума Ответить с цитированием
Старый 03.08.2013, 14:47   #8
frommars
Форумчанин
 
Регистрация: 02.07.2011
Сообщений: 144
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Мсье дурак или мсье шутит?
Очень много тем по многим форумам на тему что линкер от мелкомягких мягко говоря "странный".
frommars вне форума Ответить с цитированием
Старый 03.08.2013, 15:09   #9
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от frommars Посмотреть сообщение
Очень много тем по многим форумам на тему что линкер от мелкомягких мягко говоря "странный".
Хорошо, тогда будьте любезны в чем в данном случае состоит "странность" линкера от мелкософта и что в данном случае делать скажем линкер других компиляторов, например gcc.
waleri вне форума Ответить с цитированием
Старый 03.08.2013, 15:26   #10
frommars
Форумчанин
 
Регистрация: 02.07.2011
Сообщений: 144
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Хорошо, тогда будьте любезны в чем в данном случае состоит "странность" линкера от мелкософта и что в данном случае делать скажем линкер других компиляторов, например gcc.
чуть позже сэмпл покажу.

P.S. линкер(ld) у GnuCC работает идеально.
frommars вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка линковки LNK 2019(С++) |wanderer| Помощь студентам 6 04.05.2012 19:34
Ошибка линковки + вопрос hvz- Win Api 17 14.03.2012 22:47
Ошибка линковки! Hacker19_90 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 19.01.2012 06:43
Шаблонный класс, ошибка линковки revaldo666 Общие вопросы C/C++ 1 12.12.2011 15:57
Банальная ошибка линковки prouser Общие вопросы C/C++ 2 24.07.2011 04:22