what does it mean ? [ определение типа архитектуры в хедере]
компилятор какой?
#define SIZEOF_LONG (sizeof(long
А вообще, эти константы как-то стандартизованы ? Откуда их правильно брать ?
__s390x__ тогда уж, а не __ia64__
> на linux'е на платформе s390x (соотв. самый интересный вопрос ) ?
http://gcc.fyxm.net/summit/2003/Porting%20to%2064%20bit.pdf п.4.11
будем считать, что я отвечал на первый вопрос
там же не стоит ничего типа __иа64__, а sizeof_long на атлоне все равно равен 8
ЗЫ gcc
попробую __s390x__
ЗЫ gcc там стоит < чем 3.4 и это оч. хорошо :-
__s390x__ помогло, но это ё#%$@оё unixodbc (а это было именно оно) все равно в полном объеме не пашет, мать его так!
#if SIZEOF_LONG == n
blabla
#else
blabla
#fi
будет работать?
#if SIZEOF_LONG == nВряд ли, препроцессор же не знает Си Но как правило, достаточно человеческого
Пока не смог придумать осмысленного примера, чтобы нужен был именно #if
if( SIZEOF_LONG == n )
...
Почему он не может так сделать?
М4, например, так может.
---
...Я работаю антинаучным аферистом...
#if SIZEOF_LONG == 8
typedef uint64_t unsigned long int
typedef int64_t long int
#else
typedef uint64_t unsigned long long int
typedef int64_t long long int
#fi
Зато sizeof( long int в которую превращается SIZEOF_LONG, уже не является частью препроцессора. Или ты как обычно не прочел тему?
Почему он не может так сделать?Ну мы отросток обсуждаем, который из гадфазера растет
такие шняги вроде обычно через autoconf проверяют нынче
typedef uint64_t unsigned long intНу чего велосипеды то изобретать? #include <sys/types.h>
К тому же _везде_ sizeof(long long) = 8, sizeof(int) = 4, только sizeof(long) зависим, ну не пиши никогда long, делов то.
2) Это был всего лишь возможный пример. И вообще, <sys/types.h> не везде доступен. Для портабельности это полезно.
2) Это был модельный пример. Можно использовать и для других целей
довай премер, хуле
DOS
16 бит не катит, давай ещё
Например Borland C++ 3.xx(?).
Что значит не катит? Меня не ебет что для тебя не катит.
Стандарт таких гарантий не дает.тогда, xxx, поясняй какой "стандарт" здесь имеется ввиду
Само собой, стандарт ISO.
http://yaroslav-v.chat.ru/digit.html к примеру.
Вот теперь я могу ответить: покажите
Тебе, имхо, ясно и предельно понятно написали, что стандарт языка программирования C никаких гарантий на размер инта не даёт. Не тупи.
только само утверждение, что "On some machines sizeof(int)=8"
если из контекста треда намеренно не выпрыгивать,
вспоминая не к месту всякую хуйню, то про int и long long правильно сказано
(или всё-таки пример будет?)
Ты уверен что sizeof(int) везде 4? Стандарт таких гарантий не дает. И вообще это неправда.Всё написано понятно и ясно. Первый чел написал, что размер инта всегда 4, второй возразил, что это неверно. Это действительно неверно, поскольку в стандарте языка С никаких гарантий относительно размера инта нет.
Поэтому насчёт размера инта сказано неправильно.
бля, хорош флуд в моем треде разводить!
2) Размер sizeof(int разумеется, указывается для каждой архитектуры отдельно,
поэтому ссылаться на некий общий стандарт здесь вообще нельзя.
Но на основе информации о интересующем подмножестве архитектур
и реализаций ОС такие выводы делать можно.
В данном случае речь изначально идёт про ОС общего назначения,
среди которых архитектур отличных от 32- и 64-битных сейчас не встречается,
да и самих архитектур не так уж много.
> Поэтому насчёт размера инта сказано неправильно.
Если не ограничили в одном месте, ещё не значит, что не могут ограничить в другом.
Пусть даже всех по отдельности, но одинаково.
Конкретный пример мог бы опровергнуть эмпирическое утверждение о размере инта,
но никак не ссылка на стандарт языка C, особенно, если он этот вопрос вообще не затрагивает.
Конкретно через пару часов мне придётся подправлять прогу на С под восьмибитную архитектуру, и sizeof(int) в ней равен 2. Более того, инт в ней LittleEndian.
личные наезды удалены
По названию треда вроде бы можно представить, на каких платформах это может понадобиться.
А что, вышеупомянутый __LP64__ на этих s390x не определён?
Хорошо. Это(данное) обсуждение началось с меня, когда я ответил тебе на вопрос по поводу для чего это может понадобиться. Так вот: мне решать каков контекст этого обсуждения. Так как я его начал. Меня даже не интересует первоначальная тема.
Ну ладно, уговорил.
У тебя может быть только своя точка зрения на то, что ты хочешь здесь видеть.
Учитывая упоминания об autoconf и просьбе привести осмысленный пример
(а это так же ограничивает контекст, причём, возможно, совсем не так, как тебе хотелось бы это видеть
далеко не очевидно, что речь идёт про сферический C в вакууме.
Далее, меня заинтересовал вопрос об sizeof(int)!=4 на нормальной архитектуре
(мне это действительно интересно и я могу так же считать это полностью независимой веткой.
Хорошо. Представь себе 80286, на котором крутится мэйл-сервер. Давно крутится. Внимание, вопрос: какой там сайзоф(инт)?
> Давно крутится. Внимание, вопрос: какой там сайзоф(инт)?
Вероятно, 16 бит, но считать 286 нормальной архитектурой я не могу,
так же как различные DSP (там вообще чего только не бывает)
и embedded контроллеры.
Чтобы не было дальнейших разночтений, под "нормальной" я подразумеваю
возможность установки какой-нибудь распространённой полноценной UN*X-like OS,
куда можно без лишнего гемора перенести более-менее кроссплатформенный софт
в исходниках (огромное количество которого рассчитано на 32 бита).
Т.е. в первую очередь, с интом не меньшим, чем эти самые 32 бита,
чтобы не приходилось задумываться над каждой целочисленной переменной,
будет ли она по прежнему влезать в int или нет.
Наиболее вероятного примера - sizeof(int)=8 - я пока не наблюдал,
хотя видел вроде бы уже не мало, но и ничего противоречащего
такой возможности тоже не встречал.
С вообще нихуя не кроссплатформенный, надо это понять и с этим свыкнуться. Пока у тебя может скакать размер инта или лонга - кроссплатформенности нет. Говорить "моя прога кроссплатформенна на "нормальных платформах". "Нормальная платформа" - это та, на которой sizeof(int) == 4" - это софизм и передёргивание.
Шарп и жава - кроссплатформенные, потому что раз и навсегда сказано, что инт - 32 бита. И не ебёт.
Ничего страшного в некроссплатформенности нет, даже наоборот. Когда ты пишешь под конкретный микроконтроллер о кросплатформенности речи вообще не идёт практически, зато к конкретному компилятору прилагается хелп, в котором ясно сказано, что инт - 16 битный, и ты типа это знаешь и используешь.
Ничего, мне просто пример нужен.
> С вообще нихуя не кроссплатформенный, надо это понять и с этим свыкнуться.
> Пока у тебя может скакать размер инта или лонга - кроссплатформенности нет.
Ну типа есть int32 и просто int.
Если везде, где 32 важно, я буду юзать первый, а там, где я юзаю второй, всё нужное влезает,
то от увеличения размера int хуже не станет.
Соответственно, можно считать, что есть кроссплатформенность на уровне исходников,
когда при переносе типы, не завязанные на конкретный размер, не уменьшаются.
> "Нормальная платформа" - это та, на которой sizeof(int) == 4" - это софизм и передёргивание.
sizeof(int) >= 4, так что вопрос пока не лишён смысла.
Ну что шарп - кроссплатформенный, это, конечно, лол.
19.01.2005 1:34 [чей-то никнейм]: сатурн долп!
Ну то есть по-моему это достаточный аргумент. Тебе, конечно, может быть всё равно, что там о тебе пишут друг-другу в аське люди.
а что, он не кроссплатформенный?
А насчёт "умных" - так их всегда было полно. Подумай, являются ли люди действительно умными, если они пишут ФЖю ругательства про меня, если заранее известно, что ни на меня ни на отношение ко мне упомянутого ФЖя они не повлияют? Так что мне пох на мнение обо мне "умных". Пусть ругаются, если им от этого приятнее.
имхо, кроссплатформенность языка не равносильна существованию его компиляторов на разных платформах.
А о какой кроссплатформенности можно говорить, если язык реализован только на одной платформе?
Это для тебя будет аргументом?
Для меня, впрочем, нет.
Скажи, Java - кроссплатформенный язык?
Да, но пока не вижу связи.
Я очень не хотел с тобой спорить, и не буду. Скажу одно слово: Windows CE, остальное додумывай сам. А, добавлю еще два слова: compact framework.
Ага. Приложение можно перенести с одного виндоуса на другой... Великая заслуга микросакс. Поаплодируем ей. Она наконец смогла сделать свои системы совместимыми.
Но я сегодня добр как никогда, поэтому, пожалуй, сообщу тебе новость: [амд атлон + виндовс ХР] и [poketPC + windowsCE] - это ОЧЕНЬ РАЗНЫЕ СИСТЕМЫ.
Да, ты сумел закомпилить свой мега-фтпдаунлоадер под бсд?
2) Может быть
3) Да
то, что Новелл без ведома МС сделала несертифицированный компилятор шарпа под юникс, ещё не делает шарп кроссплатформенным.А то что МС сделала (не знаю, со своего ведома или нет ) компилятор шарпа под FreeBSD (и, кстати, даже выложила его в исходниках ) может сделать его кроссплатформенным? (на всякий случай, если не в курсе - link ) Кстати, вроде именно это и положило начало проектам типа Mono и DotGNU . И почему же тогда нельзя говорить о его кроссплатформенности?
А тебе, ФЖ, я знаешь что скажу: это называется гнилые понты и сотрясание воздуха, когда ты раскидываешь пальцами и говоришь, что, типа, я знаю кое-что, а вам не скажу, потому что вы все лохи.
:Короче, я, пожалуй, повторюсь:
Ну что шарп - кроссплатформенный, это, конечно, лол.
:
Я бы на твоём месте не говорил бы о вещах, в которых ты не разбираешься. Тогда бы умные люди мне о тебе не писали в аське что-нить такое:
19.01.2005 1:34 [чей-то никнейм]: сатурн долп!
ФЖ, у тебя и остального мира, я так понимаю, разные представления о кроссплатформенности.
Да, кстати. ИМХО наличие компиляторов (точнее, CLI) под фриБСД (на интеловской архитектуре, наверное) гораздо меньше символизирует кроссплатформенность чем Compact framework. Потому что одно дело - системные вызовы обернуть, а совсем другое - запустить прогу на совершенно другом железе.
разные представления о кроссплатформенностиДай свое правильное определение.
Уговорил. Но, знаешь, можно было в двух словах это нормальным языком объяснить без опусканий, применения эпитетов типа долб и абстрактных размышленияй об "умных" людях.
Тут некоторые ораторы считают кроссплатформенным то, что работает на более чем одной платформе. Я бы назвал кроссплатформенным то, что работает на нескольких платформах от разных производителей.
Intel и AMD?
Да, на ia64 и amd64.
Если не согласен, то приведи свое определение кроссплатформенности.
AFAIK, бывает два вида кроссплатформенности:
1. На уровне железа
2. На уровне ОС
Если брать Microsoft-овскую реализацию .Net-а, то в первую очередь, они продвигают кроссплатформенность на уровне железа.
На данный момент поддерживается:
amd32, intel32, amd64, intel64,
и штуки 3-5 железок на который Windows Mobile бегает.
В некоторой степени, есть кроссплатформенность и на уровне ОС:
т.к. Win95, WinNT, Win2000, Windows Mobile 2003, Longhorn - довольно сильно друг от друга отличаются.
Сторонние производители делают попытки(на данный момент, пока это все-таки похоже на попытки) поддержать .Net и на других ОС.
Win95, WinNT, Win2000, Windows Mobile 2003, Longhorn - довольно сильно друг от друга отличаютсяAPI у них, по сути, один и и тот же. Не считая расширений, которые появляются от версии к версии. Win32 он один на всех.
Кстати, если рассуждать по-твоему, то НЕкроссплатформенного на нынешний день вообще ничего нет.
Про CE и mobile не знаю, руками не трогал. Но чё-то у меня есть определенные сомнения, что они сильно похожи на десктопные версии.
Да, если хочешь получать вежливые и информативные ответы на свои вопросы, приучайся их ставить в вежливой же форме. То есть не "платформонезависимость шарпа - это, конечно, лол", а там че-нить вроде "у меня есть определенные сомнения в том, что шарп можно считать платформонезависимым, потому что бла бла бла".
как на уровне распространяемого кода,
так и на уровне исходников.
Оставить комментарий
zya369
в хедере стоит след.собсно два вопроса
1) почему на атлоне 64 sizeof_long устанавливается в 8 - т.е. какой из defined(...) ему соответствует (не самый важный вопрос ) ?
2) что нужно добавить [ defined(?) ], чтобы он устанавливался в 8 на linux'е на платформе s390x (соотв. самый интересный вопрос ) ?