Re: _*_SOURCE (Re: gethostname vs pread/pwrite in Linux)

From
Alexei Dets ()
To
Valentin Nechayev ()
Date
2003-06-06T02:31:20Z
Area
RU.UNIX.PROG
From: Alexei Dets <adets@idsk.com>

Hi!
Valentin Nechayev wrote:
>>> Кстати, я не понял, при чём тут *компилятор*.
>>> _GNU_SOURCE ничуть не означает завязку на gcc. Или ткните пальцем,
>>> где эта завязка определена. Алексей, ау?
> AD> Убедил. Еще хуже - на glibc.
> 
> А где завязка-то? Определяем _GNU_SOURCE, кто знает (как GNU libc) -
> отрабатывает, кто не знает - ничего не делает.
> Результат - получаем нужные определения.

Фишка в том, что получаем нужные определения _только_ на системе с glibc.
Т.к. этот макрос:

- Macro: _GNU_SOURCE
      If you define this macro, everything is included: ISO C89,
      ISO C99, POSIX.1, POSIX.2, BSD, SVID, X/Open, LFS, and GNU
      extensions.

Вот. А на другой системе он, как ты точно заметил, НИЧЕГО не делает и,
сл-но, функция запросто возмет и не найдется.
 
> Или приведи пример, когда безусловное определение _GNU_SOURCE несёт вред.

IMHO, во всех случаях он несет вред, т.к. реально он даст на системе с glibc
два основных результата - определятся макросы, включающие практически все
стандартные функции из SUS + включатся BSD и GNU-расширения.

Почему плохо для переносимости программ использование различных
нестандартных расширений понятно и так, наверное. А _GNU_SOURCE будет
_провоцировать_ это, т.к. все будет компилироваться (на системе с glibc), а
в доках далеко не всегда есть, что это чисто GNU-расширение.

Почему плохо включение стандартных функций - на другой системе, ничего не
знающей о _GNU_SOURCE, они НЕ включатся, т.к. за их включение отвечают
совсем другие макросы (_XOPEN_SOURCE, например), и программа НЕ соберется.
А если использовать, скажем, тот же _XOPEN_SOURCE, то соберется. Значит все
равно _добавим_ еще и _XOPEN_SOURCE, чтобы собиралось на не-glibc
платформах :-)

Итого - включение такого "глобального" макроса _вместо_ того, который
реально нужен, только маскирует проблему на _одной_ системе, но не решает
ее, что IMHO, не есть гуд. Да еще и добавляется возможность _неосознанного_
использования совсем уж нестандартных расширений, что тоже нехорошо :-(

        Алексей

-- 
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
--- ifmail v.2.15dev5
 * Origin: InfoDesk, S.A. (2:5020/400)