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)