what does it mean ? [ определение типа архитектуры в хедере]

zya369

в хедере стоит след.

#ifndef SIZEOF_LONG
# if defined(__alpha) || defined(__sparcv9) || defined(__LP64__)
# define SIZEOF_LONG 8
#else
# define SIZEOF_LONG 4
#endif
#endif
собсно два вопроса
1) почему на атлоне 64 sizeof_long устанавливается в 8 - т.е. какой из defined(...) ему соответствует (не самый важный вопрос ) ?
2) что нужно добавить [ defined(?) ], чтобы он устанавливался в 8 на linux'е на платформе s390x (соотв. самый интересный вопрос ) ?

Dasar

компилятор какой?

Marinavo_0507

странно, почему они не сделали

#define SIZEOF_LONG (sizeof(long

ppplva

Что-нибудь вроде __ia64__ или __x86_64__.
А вообще, эти константы как-то стандартизованы ? Откуда их правильно брать ?

Chupa

> Что-нибудь вроде __ia64__ или __x86_64__.
__s390x__ тогда уж, а не __ia64__

Chupa

> что нужно добавить [ defined(?) ], чтобы он устанавливался в 8
> на linux'е на платформе s390x (соотв. самый интересный вопрос ) ?
http://gcc.fyxm.net/summit/2003/Porting%20to%2064%20bit.pdf п.4.11

ppplva

тьфу
будем считать, что я отвечал на первый вопрос

zya369

блин..
там же не стоит ничего типа __иа64__, а sizeof_long на атлоне все равно равен 8
ЗЫ gcc

zya369

спасибо за ссылку
попробую __s390x__
ЗЫ gcc там стоит < чем 3.4 и это оч. хорошо :-

zya369

хух
__s390x__ помогло, но это ё#%$@оё unixodbc (а это было именно оно) все равно в полном объеме не пашет, мать его так!

Julie16

А если написать так как ты хочешь, то конструкция вида
#if SIZEOF_LONG == n
blabla
#else
blabla
#fi
будет работать?

rosali

#if SIZEOF_LONG == n
Вряд ли, препроцессор же не знает Си Но как правило, достаточно человеческого
 
if( SIZEOF_LONG == n )
...
Пока не смог придумать осмысленного примера, чтобы нужен был именно #if

Ivan8209

SIZEOF_LONG --- это переменная препроцессора, а не Си.
Почему он не может так сделать?
М4, например, так может.
---
...Я работаю антинаучным аферистом...

Julie16

Ну например:
#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

Julie16

Зато sizeof( long int в которую превращается SIZEOF_LONG, уже не является частью препроцессора. Или ты как обычно не прочел тему?

rosali

Почему он не может так сделать?
Ну мы отросток обсуждаем, который из гадфазера растет

Marinavo_0507

такие шняги вроде обычно через autoconf проверяют нынче

rosali

typedef uint64_t unsigned long int
Ну чего велосипеды то изобретать? #include <sys/types.h>
К тому же _везде_ sizeof(long long) = 8, sizeof(int) = 4, только sizeof(long) зависим, ну не пиши никогда long, делов то.

Julie16

1) Ты уверен что sizeof(int) везде 4? Стандарт таких гарантий не дает. И вообще это неправда.
2) Это был всего лишь возможный пример. И вообще, <sys/types.h> не везде доступен. Для портабельности это полезно.

Julie16

1) Автоконф не везде доступен.
2) Это был модельный пример. Можно использовать и для других целей

Chupa

> И вообще это неправда.
довай премер, хуле

Julie16

DOS

Chupa

16 бит не катит, давай ещё

Julie16

Например Borland C++ 3.xx(?).

Julie16

Что значит не катит? Меня не ебет что для тебя не катит.

Chupa

Стандарт таких гарантий не дает.
тогда, xxx, поясняй какой "стандарт" здесь имеется ввиду

Flack_bfsp

лол.
Само собой, стандарт ISO.

Julie16

Вот теперь я могу ответить: http://yaroslav-v.chat.ru/digit.html к примеру.

Chupa

стандарт ISO на DOS?
покажите

Flack_bfsp

Тебе, имхо, ясно и предельно понятно написали, что стандарт языка программирования C никаких гарантий на размер инта не даёт. Не тупи.

Chupa

там тоже примеров нет
только само утверждение, что "On some machines sizeof(int)=8"

Chupa

сам не тупи
если из контекста треда намеренно не выпрыгивать,
вспоминая не к месту всякую хуйню, то про int и long long правильно сказано
(или всё-таки пример будет?)

Flack_bfsp

Это кто из контекста вылезает?
Ты уверен что sizeof(int) везде 4? Стандарт таких гарантий не дает. И вообще это неправда.
Всё написано понятно и ясно. Первый чел написал, что размер инта всегда 4, второй возразил, что это неверно. Это действительно неверно, поскольку в стандарте языка С никаких гарантий относительно размера инта нет.
Поэтому насчёт размера инта сказано неправильно.

zya369

бля, хорош флуд в моем треде разводить!

Chupa

1) Там не сказано, что имеется ввиду стандарт C, просто "стандарт" и всё.
2) Размер sizeof(int разумеется, указывается для каждой архитектуры отдельно,
поэтому ссылаться на некий общий стандарт здесь вообще нельзя.
Но на основе информации о интересующем подмножестве архитектур
и реализаций ОС такие выводы делать можно.
В данном случае речь изначально идёт про ОС общего назначения,
среди которых архитектур отличных от 32- и 64-битных сейчас не встречается,
да и самих архитектур не так уж много.
> Поэтому насчёт размера инта сказано неправильно.
Если не ограничили в одном месте, ещё не значит, что не могут ограничить в другом.
Пусть даже всех по отдельности, но одинаково.
Конкретный пример мог бы опровергнуть эмпирическое утверждение о размере инта,
но никак не ссылка на стандарт языка C, особенно, если он этот вопрос вообще не затрагивает.

bleyman

Ха ха ха ха ха!
Конкретно через пару часов мне придётся подправлять прогу на С под восьмибитную архитектуру, и sizeof(int) в ней равен 2. Более того, инт в ней LittleEndian.
личные наезды удалены

Marinavo_0507

Контекст треда - это unixodbc, судя по всему.
По названию треда вроде бы можно представить, на каких платформах это может понадобиться.
А что, вышеупомянутый __LP64__ на этих s390x не определён?

Julie16

Хорошо. Это(данное) обсуждение началось с меня, когда я ответил тебе на вопрос по поводу для чего это может понадобиться. Так вот: мне решать каков контекст этого обсуждения. Так как я его начал. Меня даже не интересует первоначальная тема.

Marinavo_0507

Ну ладно, уговорил.

Chupa

> мне решать каков контекст этого обсуждения
У тебя может быть только своя точка зрения на то, что ты хочешь здесь видеть.
Учитывая упоминания об autoconf и просьбе привести осмысленный пример
(а это так же ограничивает контекст, причём, возможно, совсем не так, как тебе хотелось бы это видеть
далеко не очевидно, что речь идёт про сферический C в вакууме.
Далее, меня заинтересовал вопрос об sizeof(int)!=4 на нормальной архитектуре
(мне это действительно интересно и я могу так же считать это полностью независимой веткой.

bleyman

Хорошо. Представь себе 80286, на котором крутится мэйл-сервер. Давно крутится. Внимание, вопрос: какой там сайзоф(инт)?

Chupa

> Хорошо. Представь себе 80286, на котором крутится мэйл-сервер.
> Давно крутится. Внимание, вопрос: какой там сайзоф(инт)?
Вероятно, 16 бит, но считать 286 нормальной архитектурой я не могу,
так же как различные DSP (там вообще чего только не бывает)
и embedded контроллеры.
Чтобы не было дальнейших разночтений, под "нормальной" я подразумеваю
возможность установки какой-нибудь распространённой полноценной UN*X-like OS,
куда можно без лишнего гемора перенести более-менее кроссплатформенный софт
в исходниках (огромное количество которого рассчитано на 32 бита).
Т.е. в первую очередь, с интом не меньшим, чем эти самые 32 бита,
чтобы не приходилось задумываться над каждой целочисленной переменной,
будет ли она по прежнему влезать в int или нет.
Наиболее вероятного примера - sizeof(int)=8 - я пока не наблюдал,
хотя видел вроде бы уже не мало, но и ничего противоречащего
такой возможности тоже не встречал.

bleyman

Пыджжи. Ты вообще что доказать пытаешься?
С вообще нихуя не кроссплатформенный, надо это понять и с этим свыкнуться. Пока у тебя может скакать размер инта или лонга - кроссплатформенности нет. Говорить "моя прога кроссплатформенна на "нормальных платформах". "Нормальная платформа" - это та, на которой sizeof(int) == 4" - это софизм и передёргивание.
Шарп и жава - кроссплатформенные, потому что раз и навсегда сказано, что инт - 32 бита. И не ебёт.
Ничего страшного в некроссплатформенности нет, даже наоборот. Когда ты пишешь под конкретный микроконтроллер о кросплатформенности речи вообще не идёт практически, зато к конкретному компилятору прилагается хелп, в котором ясно сказано, что инт - 16 битный, и ты типа это знаешь и используешь.

Chupa

> Ты вообще что доказать пытаешься?
Ничего, мне просто пример нужен.
> С вообще нихуя не кроссплатформенный, надо это понять и с этим свыкнуться.
> Пока у тебя может скакать размер инта или лонга - кроссплатформенности нет.
Ну типа есть int32 и просто int.
Если везде, где 32 важно, я буду юзать первый, а там, где я юзаю второй, всё нужное влезает,
то от увеличения размера int хуже не станет.
Соответственно, можно считать, что есть кроссплатформенность на уровне исходников,
когда при переносе типы, не завязанные на конкретный размер, не уменьшаются.
> "Нормальная платформа" - это та, на которой sizeof(int) == 4" - это софизм и передёргивание.
sizeof(int) >= 4, так что вопрос пока не лишён смысла.

Flack_bfsp

Ну что шарп - кроссплатформенный, это, конечно, лол.

bleyman

Я бы на твоём месте не говорил бы о вещах, в которых ты не разбираешься. Тогда бы умные люди мне о тебе не писали в аське что-нить такое:
19.01.2005 1:34 [чей-то никнейм]: сатурн долп!
Ну то есть по-моему это достаточный аргумент. Тебе, конечно, может быть всё равно, что там о тебе пишут друг-другу в аське люди.

bobby

а что, он не кроссплатформенный?

Flack_bfsp

ФЖ, то, что Новелл без ведома МС сделала несертифицированный компилятор шарпа под юникс, ещё не делает шарп кроссплатформенным. Или у тебя есть другие аргументы? Давай, я послушаю. Интересно умного рюхающего чела послушать.
А насчёт "умных" - так их всегда было полно. Подумай, являются ли люди действительно умными, если они пишут ФЖю ругательства про меня, если заранее известно, что ни на меня ни на отношение ко мне упомянутого ФЖя они не повлияют? Так что мне пох на мнение обо мне "умных". Пусть ругаются, если им от этого приятнее.

bobby

имхо, кроссплатформенность языка не равносильна существованию его компиляторов на разных платформах.

Flack_bfsp

А о какой кроссплатформенности можно говорить, если язык реализован только на одной платформе?

bobby

Кстати, Mono удовлетворяет стандарту ECMA на C#!
Это для тебя будет аргументом?
Для меня, впрочем, нет.

bobby

Скажи, Java - кроссплатформенный язык?

Flack_bfsp

Да, но пока не вижу связи.

bleyman

Я очень не хотел с тобой спорить, и не буду. Скажу одно слово: Windows CE, остальное додумывай сам. А, добавлю еще два слова: compact framework.

Julie16

Ага. Приложение можно перенести с одного виндоуса на другой... Великая заслуга микросакс. Поаплодируем ей. Она наконец смогла сделать свои системы совместимыми.

bleyman

Дибил? (с)
Но я сегодня добр как никогда, поэтому, пожалуй, сообщу тебе новость: [амд атлон + виндовс ХР] и [poketPC + windowsCE] - это ОЧЕНЬ РАЗНЫЕ СИСТЕМЫ.
Да, ты сумел закомпилить свой мега-фтпдаунлоадер под бсд?

Julie16

1) Нет
2) Может быть
3) Да

stat7984215

то, что Новелл без ведома МС сделала несертифицированный компилятор шарпа под юникс, ещё не делает шарп кроссплатформенным.
А то что МС сделала (не знаю, со своего ведома или нет ) компилятор шарпа под FreeBSD (и, кстати, даже выложила его в исходниках ) может сделать его кроссплатформенным? (на всякий случай, если не в курсе - link ) Кстати, вроде именно это и положило начало проектам типа Mono и DotGNU . И почему же тогда нельзя говорить о его кроссплатформенности?

Flack_bfsp

Первый информативный пост. Спасибо за сцылку и инфу.
А тебе, ФЖ, я знаешь что скажу: это называется гнилые понты и сотрясание воздуха, когда ты раскидываешь пальцами и говоришь, что, типа, я знаю кое-что, а вам не скажу, потому что вы все лохи.

bleyman

Ты хочешь сказать, что настолько не разбираешься в вопросе, что даже не знаешь что такое Windows CE и compact framework, и как они связаны с шарпом? В таком случае зачем же ты решил написать
:
Ну что шарп - кроссплатформенный, это, конечно, лол.
Короче, я, пожалуй, повторюсь:
:
Я бы на твоём месте не говорил бы о вещах, в которых ты не разбираешься. Тогда бы умные люди мне о тебе не писали в аське что-нить такое:
19.01.2005 1:34 [чей-то никнейм]: сатурн долп!

Flack_bfsp

ФЖ, у тебя и остального мира, я так понимаю, разные представления о кроссплатформенности.

bleyman

Да, кстати. ИМХО наличие компиляторов (точнее, CLI) под фриБСД (на интеловской архитектуре, наверное) гораздо меньше символизирует кроссплатформенность чем Compact framework. Потому что одно дело - системные вызовы обернуть, а совсем другое - запустить прогу на совершенно другом железе.

shlyumper

разные представления о кроссплатформенности
Дай свое правильное определение.

Flack_bfsp

Уговорил. Но, знаешь, можно было в двух словах это нормальным языком объяснить без опусканий, применения эпитетов типа долб и абстрактных размышленияй об "умных" людях.

sergey_m

Тут некоторые ораторы считают кроссплатформенным то, что работает на более чем одной платформе. Я бы назвал кроссплатформенным то, что работает на нескольких платформах от разных производителей.

Marinavo_0507

> Я бы назвал кроссплатформенным то, что работает на нескольких платформах от разных производителей.
Intel и AMD?

sergey_m

> Intel и AMD?
Да, на ia64 и amd64.

Dasar

> ФЖ, у тебя и остального мира, я так понимаю, разные представления о кроссплатформенности
Если не согласен, то приведи свое определение кроссплатформенности.
AFAIK, бывает два вида кроссплатформенности:
1. На уровне железа
2. На уровне ОС
Если брать Microsoft-овскую реализацию .Net-а, то в первую очередь, они продвигают кроссплатформенность на уровне железа.
На данный момент поддерживается:
amd32, intel32, amd64, intel64,
и штуки 3-5 железок на который Windows Mobile бегает.
В некоторой степени, есть кроссплатформенность и на уровне ОС:
т.к. Win95, WinNT, Win2000, Windows Mobile 2003, Longhorn - довольно сильно друг от друга отличаются.
Сторонние производители делают попытки(на данный момент, пока это все-таки похоже на попытки) поддержать .Net и на других ОС.

Flack_bfsp

Win95, WinNT, Win2000, Windows Mobile 2003, Longhorn - довольно сильно друг от друга отличаются
API у них, по сути, один и и тот же. Не считая расширений, которые появляются от версии к версии. Win32 он один на всех.
Кстати, если рассуждать по-твоему, то НЕкроссплатформенного на нынешний день вообще ничего нет.

bleyman

АФАИК в лонгхорне вин32 будет вообще эмулируемая, у 95ой в принципе нет поддержки уникода (у 98ой немножко есть, через шнягу под названием Microsoft Layer for Unicode, но это не совсем то в ХР вроде как две ветви апи почти слились в оргазме (или даже в 2000 но АПИ 98ой и НТ различаются очень сильно. Например, можешь посмотреть описание моей любимой функции NetShareEnum.
Про CE и mobile не знаю, руками не трогал. Но чё-то у меня есть определенные сомнения, что они сильно похожи на десктопные версии.
Да, если хочешь получать вежливые и информативные ответы на свои вопросы, приучайся их ставить в вежливой же форме. То есть не "платформонезависимость шарпа - это, конечно, лол", а там че-нить вроде "у меня есть определенные сомнения в том, что шарп можно считать платформонезависимым, потому что бла бла бла".

Dasar

Кроссплатформенность также еще бывает:
как на уровне распространяемого кода,
так и на уровне исходников.
Оставить комментарий
Имя или ник:
Комментарий: