|
obruboff
Не понимаю, почему "между"? Когда вышел 64битный Solaris, именно линтом прекрасно находились кривые приведения в программах.
У него иногда сносит крышу. От тайпдефов как минимум. Поэтому:
#ifndef lint
typedef signed short sb2;
#else
#define sb2 signed short
#endif
(с) %ORACLEHOME%\oci73\include\oratypes.h
Не вижу проблемы - Makefile на что?
Использовать его для определения, что инклудить, Types.h или sys/types.h?
typedef
Указатель + malloc()
И дефайны, дефайны... Так как если некий компилятор поддерживает тип, то лучше пользоваться его реализацией, что опять приводит к #if defined(_MSC_VER)...
Насколько я знаю, компилятор должен поддерживать определенный стандарт языка. Если такой компилятор не реализован на платформе - какие вопросы к ОС?
Какие особенности библиотек имеются ввиду?
Те, которые не освещены стандартами или оставлены как implementation details.
Например, какой формат использовать для вывода printf'ом 64-битного целого? У меня с этим была целая эпопея, когда результат работы SE 1.0 падал при выдаче отладочной информации: при разработке не учли наличие такого компилятора, как bcc.
Или вообще перл:
#ifdef sparc
# define SIZE_TMAXVAL SB4MAXVAL /* This case applies for sun4 */
#else
# define SIZE_TMAXVAL UB4MAXVAL /* This case applies for others */
#endif /* sparc */
Источник тот же
Мы про ОС говорим? Совместимость кого с чем?
Мы говорим про ifdef'ы. Совместимость - это, например, потребность в KR-style, что тоже отдельный блок ifdef'ов, с перечислением, кому в каком виде отдавать.
Должен выравниваться в аппаратно-зависимой части.
Во время сохранения в файл, который должен быть переносимым? Разве БД никому не нужны? Здесь за порядком байт в целых должен следить тот, кто пишет.
Моя позиция проста - если сказано, что есть аппаратно-зависимая и -независимая части - подели код. В том, что это невозможно в принципе ты меня пока не убедил.
И не собираюсь. Просто объясняю, что такого не бывает, и никогда не будет из-за неэффективности.
Подели код - это те же ifdef'ы, против которых ты так возражал, и которые, опять же, используются не для портабельности вообще, а всего лишь для определенного набора платформ.
Я не большой специалист по Windows, может, на момент написания тобой этой программы такой функции не было
Ее действительно не было, но пример все равно вышел неудачным - оно будет работать простой перекомпиляцией. Тем не менее, идея понятна - сохранение указателя в не зависящем от прикладного кода хранилище фиксированного размера, которого в настоящий момент времени достаточно для хранения этого указателя.
но тем не менее, никто не говорит, что старому коду не надо делать cleanup
Это как раз верно. Но отрицает идею абсолютной портабельности как таковой.
Я, конечно, понимаю, что проще разными указателями ссылаться на кусок памяти, но проверять при этом размер все-таки стоит...
Это означает, что ты либо туда засовываешь размер, либо хочешь скорости.
Сам подумай - есть у тебя мат. модель, ты разрабатываешь реальную железку - в процессе разработки в проект вносятся изменения (что естественно), это влечет изменения мат. модели - пока камень не объявлен готовым в серию, проект создания эмулятора закончен быть не может в принципе. Если проект значится текущим, из этого не следует, что там еще конь не валялся
То есть процессора как такового нет, и они кричали ура зря? Я от разработки железа далек, но просто в голове не укладывается, как, например, можно делать что-то, если не знаешь результата...
P.S. Предлагаю закрыть тему ifdef'ов - каждый все равно останется при своем мнении.
|