Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 11.07.2018
Сообщений: 4

Объяснить Отличие С под Windows и Linux

11.07.2018, 11:44. Показов 4184. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
С очень на этих операционных системах очень отличается. Нужно выполнить задание
Create a function that displays the alphabet in lowercase, on a single line, by ascending order, starting from the letter ’a’.
Кто может помочь сделать и объяснить...
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.07.2018, 11:44
Ответы с готовыми решениями:

Копирование файлов с машины под Linux на машину под Windows Server
Добрый день! Возникла такая проблема. Не знаю как подступиться к скрипту. Задача следующая: Необходимо копировать на Windows сервер...

QFile.open() под Linux работает, под windows нет
QDateTime dt = QDateTime::currentDateTime(); logfilepath = "log_" + dt.toString() + ".txt"; logfilepath.replace(' ','_'); ...

Консультант+ на машине под Linux по сети с машины под Windows
Есть такой сложный вопрос, нужно запустить Консультант+ сетевая версия на Linux. При этом сам консультант живёт на машине с Windows

39
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
22.08.2018, 20:47
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Я этого в стандарте с ходу не нашел.
типы указателей Подбельский
типы указателей Подбельский
0
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
22.08.2018, 21:15
Цитата Сообщение от DrOffset Посмотреть сообщение
типы указателей Подбельский
типы указателей Подбельский
Вот как раз дефайн CHAR_BIT 8 - платформенно зависим и приведён в качестве примера, а не как истина в последней инстанции.
Т.е. программист, следуя стандарту должен опираться на CHAR_BIT, а не на 8, потому как этот дефайн может быть любым, в этом случае программист уже не будет зависеть от железа - этим будет заниматься создатель компилятора, который и пропишет нужное значение для CHAR_BIT.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
22.08.2018, 22:10
drfaust, что-то мне не понятно с чем именно вы не согласны.

Вот цитата из 5.2.4.2.1:
Their implementation-defined values shall be equal or greater in magnitude (absolute value) to those shown, with the same sign.
Вот дано там число 8 (пусть даже в качестве примера, как вы говорите), а цитата выше говорит, что значения данных констант обязаны быть большими или равными показанным значениям. При этом никто не утверждает, что они не зависят от платформы.

Добавлено через 2 минуты
Я напомню контекст моего ответа:
Цитата Сообщение от Вованя Посмотреть сообщение
Минимум 8.
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Я этого в стандарте с ходу не нашел. Приведите цитатц.
Жирным выделил ключевое, и собственно ради чего приводилась цитата.
1
23.08.2018, 04:04

Не по теме:

Возможна ли реализация, соответсвующая стандарту, на недвоичных ЭВМ?
Пришлось бы искусственно ограничивать диапазон значений, чтобы побитовое отрицание, сдвиги и т.п работали так, как ожидается.

0
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
23.08.2018, 10:40
Цитата Сообщение от DrOffset Посмотреть сообщение
Жирным выделил ключевое, и собственно ради чего приводилась цитата.
По стандарту - равно или больше CHAR_BITS, как Вы видите - нигде не сказано сколько оно, CHAR_BITS может быть любым, и если программер опирается именно на CHAR_BITS нигде не думая сколько оно(7, 8, 10 и т.п.), то и прога сможет работать на любой платформе с любым реальным значением CHAR_BITS.

З.Ы. такое ощущение, что мы говорим об одном и том же, только разными словами...
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
23.08.2018, 11:54
Цитата Сообщение от drfaust Посмотреть сообщение
как Вы видите - нигде не сказано сколько оно, CHAR_BITS может быть любым, и если программер опирается именно на CHAR_BITS нигде не думая сколько оно(7, 8, 10 и т.п.), то и прога сможет работать на любой платформе с любым реальным значением CHAR_BITS.
Мне кажется все-таки мысль ускользнула.
Во-первых я нигде не говорил, что размер байта всегда и строго 8. Наоборот, я привел данную цитату в доказательство того, что это не так. Однако есть важный момент, стандарт нам говорит, что вот, дескать, тут показаны значения констант, они зависят от реализации и могут меняться в зависимости от платформы, но лишь только в большую сторону. Написано же об этом прямо:
Their implementation-defined values shall be equal or greater in magnitude (absolute value) to those shown, with the same sign.
Нам эта фраза однозначно говорит, что значения констант показаны не для примера, а как отправная точка.
Я уже не знаю как выделять еще, чтобы было понятно.

И уж конечно, я нисколько не спорю, что значения могут быть больше 8. Стандарт допускает и 9-битный байт, и 12-битный и т.д.
И уж точно я не отрицаю, что существуют машины (или протоколы), где разрядность байта была меньше. И то, что компилятор С для них создать возможно - я тоже не отрицаю, только вот стандарту он соответствовать не будет.
1
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
23.08.2018, 17:01
Я ,конечно не монстр английского, но мне кажется, что под фразой "to those show" имеется как раз значение CHAR_BITS без привязки к 8бит.
Annex E:
Implementation limits
The contents of the header <limits.h> are given below, in alphabetical order. The
minimum magnitudes shown shall be replaced by implementation-defined magnitudes
with the same sign. The values shall all be constant expressions suitable for use in #if
preprocessing directives. The components are described further in 5.2.4.2.1.
#define CHAR_BIT 8
#define CHAR_MAX UCHAR_MAX or SCHAR_MAX
#define CHAR_MIN 0 or SCHAR_MIN
#define INT_MAX +32767
****
Т.е. поставщик компилера под свою железяку должен заменить эти значения в соответствии с железкой. Если его устраивает CHAR_BIT равный 8 - он его оставит(подавляющее большинство железа), если нет, может сделать и 4 бита.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
23.08.2018, 19:13
Цитата Сообщение от drfaust Посмотреть сообщение
может сделать и 4 бита.
Ну как же он может это сделать, если там английским по белому написано shall be equal or greater?
А цитата Annex E никак не противоречит этому. Действительно, разработчик может поменять значение на любое число большее 8-ми, или оставить все как есть.

Цитата Сообщение от drfaust Посмотреть сообщение
под фразой "to those show" имеется как раз значение CHAR_BITS без привязки к 8бит.
Вот вам выше написали "должен (обязан) быть равным (equal) или большим (greater)". Спрашивается, большим или равным ЧЕМУ? Тому, что показано (shown) в этом разделе. А показано там число 8. (Если по-вашему to those shown не относится к представленным ниже константам, то объясните к чему она относится, и ЧЕМУ должно быть больше, либо равно значение?)
0
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
23.08.2018, 19:24
Зашли в тупик...

Я мыслю так "shall be equal or greater that CHAR_BIT" и
Цитата Сообщение от DrOffset Посмотреть сообщение
Если по-вашему to those shown не относится к представленным ниже константам, то объясните к чему она относится, и ЧЕМУ должно быть больше, либо равно значение?
Только относительно CHAR_BIT, какое бы оно значение оно не имело - это уже решает разраб компилера:
Цитата Сообщение от drfaust Посмотреть сообщение
shall be replaced by implementation-defined magnitudes
Думаю будем бодаться очень долго, надеюсь кто нибудь, более знающий разрулит нас.

Дело в том, что это один из фундаментальных вопросов.
1. Если прав DrOffset, то имеем дикие проблемы "кроссплатформеностью" Си - на минимально адресуемом объекте ниже 8 имеем дикие проблемы.
2. Если прав я, то имеем математический казуз, при котором практически отсутствует целочисленная арифметика при CHAR_BIT равном 1 или 0.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
23.08.2018, 19:37
Цитата Сообщение от drfaust Посмотреть сообщение
Я мыслю так "shall be equal or greater that CHAR_BIT"
Как это по-вашему должно реализовываться на практике?

Цитата Сообщение от drfaust Посмотреть сообщение
надеюсь кто нибудь, более знающий разрулит нас.
Кто это мог бы быть? Кому вы доверяете?
Вот, например, ответ с SO, в котором написано тоже самое, о чем говорю я: https://stackoverflow.com/a/881968

Цитата Сообщение от drfaust Посмотреть сообщение
имеем дикие проблемы "кроссплатформеностью" Си
Давайте так, сможете назвать такую архитектуру, для которой это было бы экономически важно?
0
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
23.08.2018, 19:54
Цитата Сообщение от DrOffset Посмотреть сообщение
Кто это мог бы быть? Кому вы доверяете?
Вот, например, ответ с SO,
Тот, кто меня убедит. Буду вникать - если чего-то не пойму, не обессудьте - попрошу объяснить...

Цитата Сообщение от DrOffset Посмотреть сообщение
сможете назвать такую архитектуру, для которой это было бы экономически важно?
А причём тут экономическая целесообразность? Это уже решает производитель железки, а не стандарт Си.
Для ARM, STM, i51 - не поленились, не только компилеры Си, но и целые среды с либами под обвязку есть...
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
23.08.2018, 20:01
Цитата Сообщение от drfaust Посмотреть сообщение
Это уже решает производитель железки, а не стандарт Си.
Если кому-то будет столь необходима железка с такой разрядностью, то несоответствие стандарту его не остановит.

Цитата Сообщение от drfaust Посмотреть сообщение
А причём тут экономическая целесообразность?
При том, что "дикие" проблемы, будут именно "дикими" только в случае полного несоответствия описанного в стандарте требованиям рынка. Языки же не ради эстетического удовольствия, как правило, разрабатывают, а для решения вполне конкретных бизнес-задач. Поэтому если в стандарт ввели подобное ограничение, то только после анализа всех вводных. Если вы считаете, что подобное ограничение больно ударит по крассплатформенности, а значит и по сфере применения языка С, то приведите примеры, доказывающие это.
0
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
23.08.2018, 20:09
Меня больше теория интересует и трактовка стандарта. Потому и возник этот спор.
Сейчас пытаюсь разжевать Вашу ссылку на стэковерфлоув...

Просто хочу понять его "до конца"... Язык достаточно жёсткий(в смысле ограничений и типизации), но предоставляет, не в пример остальным, удивительную гибкость. Найти его "дно" - вот что меня интересует.
0
24.08.2018, 15:41

Не по теме:

Цитата Сообщение от drfaust Посмотреть сообщение
Найти его "дно" - вот что меня интересует
Не надо -- снизу ассемблер постучит..

0
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
24.08.2018, 17:49
Ну вот.
Можно начать с определений (пользуюсь этой публикацией http://www.dii.uchile.cl/~daes... nition.pdf)
3.6
1 byte
addressable unit of data storage large enough to hold any member of the basic character
set of the execution environment
2 NOTE 1 It is possible to express the address of each individual byte of an object uniquely.
3 NOTE 2 A byte is composed of a contiguous sequence of bits, the number of which is implementationdefined.
The least significant bit is called the low-order bit; the most significant bit is called the high-order
bit.
Т.е. байт, каким его видит стд Си - это достаточная единица, которая может вместить основные символы среды выполнения - не сказано, что это минимум 8бит
3.7.1
1 character
single-byte character
〈C〉 bit representation that fits in a byte
символ = один байт

5.2.4.2.1 Sizes of integer types <limits.h> - это уже жевали.

На всё это натолкнул пост с той самой темы на стековерфлов https://stackoverflow.com/a/43947910

Т.е., если чудо-разраб железяки посчитает, что для его системы достаточно 128 символов (верхняя фиксированная часть ASCII) - то и байт может сделать 7 - битным, и прописав в limits.h своего компилера Си CHAR_BIT = 7 он по прежнему будет находиться внутри стандарта - не вылезет за его пределы. Я именно об этом говорил.

Если уж вообще уйти в абсурд, то теоретически хватит и одного бита на байт, правда тогда начнутся чудеса с арифметикой.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
24.08.2018, 20:02
drfaust, по вашей же ссылке в лучшем ответе говорится ровно то же самое, о чем говорилось мной выше.
Ваши цитаты не опровергают это.
И вы так и не объяснили как по-вашему будет на практике смотреться эта интерпретация:
Цитата Сообщение от drfaust Посмотреть сообщение
Я мыслю так "shall be equal or greater that CHAR_BIT"
Вот представьте, что вы разработчик компилятора. Как выполняется данное требование в вашей реализации?

Добавлено через 10 минут
Ладно, хорошо, допустим для вас в стандарте непонятно написано. Давайте откроем книгу создателей языка. Классику K&R.

Оригинал (второе издание)
B11. Implementation-defined Limits: <limits.h> and <float.h>
The header <limits.h> defines constants for the sizes of integral types. The values below are acceptable minimum magnitudes; larger values may be used.
CHAR_BIT 8 bits in a char
Русский перевод:
В 11. Зависящие от реализации пределы: <limits.h> и <float.h>
Заголовочный файл <limits.h> определяет константы для размеров целочисленных типов. Ниже перечислены минимальные приемлемые величины, но в конкретных реализациях могут использоваться и большие значения.
CHAR_BIT 8 битов в значении char
Создатели языка вас тоже не убеждают?
1
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
24.08.2018, 20:07
Я в limits.h, который и будет поставляться с моим компилером прописал бы нужный мне CHAR_BIT(для примера возьмём 7). Естественно остальные константы будут скорректированы кратными CHAR_BIT, ибо нам нужен sizeof() - это одна из засад, 14битный int.
Опять же всё это должно поддерживаться железом(АЛУ проца) иначе обычное сложение вида add al,bl превратиться в ужасно тормозящую инлайн-функцию.

На вскидку где бы могло пригодиться - помехозащищённая фигня, на базе 8битного проца, в которой знаковый бит(8й) используется как бит чётности для проверки не повреждены ли данные, пока ехали от ОЗУ/ПЗУ в проц и/или между внешними девайсами.

"должен быть равен или больше" - да он будет "равен", и учитывая значение CHAR_BIT размер char станет 7 бит.

Это для примера. Пример можно превратить в 4х - битный, тогда с привычной нам арифметикой будет проще.

Естественно всё это должно делаться только для конкретной железки.

Про экономику забудем - менее 8бит сейчас никому не интересно. Меня интересует теория. А именно, если CHAR_BIT не ограничен снизу 8битами - имеем теоретическую возможность "вырождения" арифметики, да и всего языка Си при CHAR_BIT равным 1, или хуже того 0

Добавлено через 3 минуты
Цитата Сообщение от DrOffset Посмотреть сообщение
Создатели языка вас тоже не убеждают?
Это доказывает что они не теоретики, а практики. И сделали реально практичный язык.

Неоднократно говорил, что если опираться на стандарт - имеем теоретическую ситуацию вырождения языка при малых CHAR_BIT. Для практики - да, смысла никакого абсолютно нет в CHAR_BIT меньше 8.

И что мы имеем исходя из нашей дискуссии:
1. Практических реализаций CHAR_BIT < 8 не было, нет и не будет, т.к. это бесмысленно
2. Стандарт допускает возможность CHAR_BIT < 8 и при этом не ограничивает снизу - т.е. в теории мы можем получить абсурд при CHAR_BIT = 1 или CHAR_BIT =0 (ну отрицательные даже для меня это уж слишком)
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
24.08.2018, 20:24
Цитата Сообщение от drfaust Посмотреть сообщение
Стандарт допускает возможность CHAR_BIT < 8 и при этом не ограничивает снизу
Вы издеваетесь?
Вот цитата:
The values given below shall be replaced by constant expressions suitable for use in #if preprocessing directives. <...> Their implementation-defined values shall be equal or greater in magnitude (absolute value) to those shown, with the same sign.
Вот ее перевод:
Значения, приведенные ниже, должны быть заменены постоянными выражениями, подходящими для использования в директивах препроцессора #if. <...> Их значения, определяемые реализацией, должны быть равны или больше по значению (по абсолютной величине) тем, которые показаны, с тем же знаком.
1
24.08.2018, 20:30

Не по теме:

Цитата Сообщение от HighPredator Посмотреть сообщение
Не надо -- снизу ассемблер постучит..
Ассемблер уже дно пробил? :D

0
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
24.08.2018, 20:37
Their implementation-defined values shall be equal or greater in magnitude
(absolute value) to those shown, with the same sign.
Меня убивает это выражение. Получается я её неправильно понимаю, из-за плохого знания английского.
Если верить гуглопереводу
Их значения, определяемые реализацией, должны быть равными или большими к показанным, с тем же знаком.
То получается что правы Вы. И CHAR_BIT НЕ может быть меньше 8...

Сдаюсь.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.08.2018, 20:37

Можно ли под Windows поставить какой - то комплект Qt, чтоб параллельно компилить под Win и Linux?
Ну как бЭ вопрос в шапке :) Тоесть не имея на компе Linux, компилировать под виндой два выходных файла, под Windows и под Linux ?

DB2 backup под Windows и под Linux.
Сделал backup DB2 базы данных. DB2 стоит под виндой. Клиент будет востанавливать backup под Unix (IBM AIX). Могут ли у клиента возникнуть...

Qt из windows под linux
Хочу компилировать программу в формате .elf то есть под Линукс, компилятор поставил, отладчик поставил, а вот с профилем беда, не пойму как...

Под windows и linux
Есть ли такая среда программирования, чтобы одна и та же программа без перекомпиляции могла работать и в windows и в linux?

Из под Windows в Linux
Скачал lazarus-1.0.8-fpc-2.6.2-win64.exe, установил, под вин компилется хорошо, как из под винды скомпилировать проект под линукс? В...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru