Перейти к содержанию

static - функции и GNU ld


Рекомендуемые сообщения

Доброе время суток!

Копался я в исходниках glibc и в файле glibc/sysdeps/standalone/brk.c наткнулся на такие строки:

#ifdef HAVE_GNU_LD

static

#endif

void

__NONE_set_memvals (argc, argv, envp)

...

{

...

}

Вопрос таков: почему функция объявляется статической только для GNU ld? Имеет ли этот спецификатор (в объявлении функций) смысл для других линкеров, кроме ld? И что он означает, вообще и конкретно применительно к GNU ld?

Ссылка на комментарий
Поделиться на другие сайты

Цитата:

Имеет ли этот спецификатор (в объявлении функций) смысл для других линкеров, кроме ld?

Безусловно.

Цитата:

И что он означает, вообще и конкретно применительно к GNU ld?

static - это своего рода ограничение видимости. Т.е. если в модуле А я сделаю функцию static, то из модуля B она не вызовется.

static для функции означает, что это локальная функция для данного модуля. static для функции в классе С++ означает, что она может вызываться для класса, а не для объекта. static для локальной переменной означает, что она находится не в стеке и инициализируется один раз.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...