LINUX.ORG.RU

char это и не signed и не unsigned а непонятно что

 


3

6
> cat main.cpp
#include <type_traits>

int main() {
        static_assert((::std::is_same<char, signed char>::value) == true);
        static_assert((::std::is_same<char, unsigned char>::value) == true);

        return 0;
}

> g++ -Wall -Wextra main.cpp
main.cpp: In function 'int main()':
main.cpp:4:2: error: static assertion failed
  static_assert((::std::is_same<char, signed char>::value) == true);
  ^~~~~~~~~~~~~
main.cpp:5:2: error: static assertion failed
  static_assert((::std::is_same<char, unsigned char>::value) == true);
  ^~~~~~~~~~~~~
★★★★
Ответ на: комментарий от Iron_Bug

это может оказаться несовместимо с архитектурой и потому бессмысленно.

А почему это МОЖЕТ оказаться? Мы ведь уже пришли к соглашению, что проекты пишут под определенные платформы, а значит заранее знают, что доступно, а что нет. Не должно быть никаких МОЖЕТ, если не идет копипаста чужого кода в изначально не планированную платформу.

rumgot ★★★★★
()
Ответ на: комментарий от rumgot

А почему это МОЖЕТ оказаться? Мы ведь уже пришли к соглашению, что проекты пишут под определенные платформы

Я больше скажу - под конкретные семейства чипов (Intel vs AMD), и под конкретные компиляторы / системное окружение. Можно, конечно, создавать условного сферического коня в вакууме который «работает всегда и везде», но цена (особенно в плане TTM) будет зашкаливать. А так: unit тесты прошли (спешу заострить внимание на том что всё покрыть невозможно) - есть определенная уверенность (надежда?) что ничего не взорвётся, и можно выкатывать. А вот когда возникнет необходимость спортироваться куда то ещё - тогда и будем думать «как» и «чего это будет стоить». Мои 2 копейки.

bugfixer ★★★★★
()
Последнее исправление: bugfixer (всего исправлений: 1)
Ответ на: комментарий от rumgot

стандарт Си определяет логику над пространством адресов и некоторые операции, производимые ALU. он более абстрактен, чем ассемблеры, и поэтому более удобен. но нет смысла прибивать его гвоздями к какой-то архитектуре. стандарт определяет общие свойства, а не частные реализации.

через typedef ты можешь определять что тебе нравится, в рамках выбранной архитектуры. в Си нет никакого тоталитаризма и он не запрещает прямые обращения к памяти и работа с указателями там совершенно естественная и очень полезная фича. он ничего не навязывает программисту. для любой задачи в Си существует множество решений и это хорошо. а дальше всё на выбор программиста. тебе дали универсальный инструмент, а полиси и правила ты сам задавай, в зависимости от твоих потребностей.

Iron_Bug ★★★★★
()
Ответ на: комментарий от rumgot

да нет никакой «неправоты». есть твой очень ограниченный опыт и ты пытаешься в это прокрустово ложе засунуть всё многообразие архитектур. а сишка поддерживает более 3000 архитектур, мне где-то такая цифра попадалась. так что твои глупые претензии к каким-то конкретным цифиркам не имеют смысла в глобальном масштабе. а стандарты - это глобальный масштаб.

Iron_Bug ★★★★★
()
Ответ на: комментарий от rumgot

ну и это... стандарт-то открыт. бери и пиши свой компилятор. кто тебе мешает? с блэкджеком и фиксированными типами. только это будет ни с чём не совместимый костыль. но тебе и не нужна совместмость, насколько я понимаю.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

Во первых, я обсуждаю плюсы. Во вторых ты путаешься в последовательности обсуждения.

Есть фундаментальные типы определенные в стандарте так: минимум столько-то бит и не более чем тип такой то.

При этом мы согласились (ты тоже) что проекты пишут каждый раз под определенные архитектуры и для каждой конкретной архитектуры для фундаментальных типов в реализации будет уже конкретное число бит.

Поэтому даже сейчас при выборе типа учитывается его битность на целевой платформе.

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

А ты как настоящий демагог уводишь в сторону и пишешь вообще не про то, что тут обсуждается.

rumgot ★★★★★
()
Ответ на: комментарий от rumgot

При этом мы согласились (ты тоже) что проекты пишут каждый раз под определенные архитектуры и для каждой конкретной архитектуры для фундаментальных типов в реализации будет уже конкретное число бит.

Прошу прощения, что ставлю под сомнение идиллию вашего консенсуса, но может объясните мне, а как проекты типа:

  • библиотек, вроде Qt или ffmpeg?

  • СУБД, вроде MySQL, SQLite, BerkeleyDB и пр.?

  • десктоп-приложения, которые развиваются в течении 30-35 лет, зародившись на 16-битовых 8086, а сейчас работающие на 64-битных x86 и ARM-ах?

Они что, каждый раз пишутся под определенные архитектуры?

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Они что, каждый раз пишутся под определенные архитектуры?

Думаю да. Вот на примере Qt: https://doc.qt.io/qt-5/supported-platforms.html

Каждый проект, лучше даже сказать конкретная версия проекта, разве не идет под что-то определенное (не обязательно под одну платформу, но под некоторое количество платформ, вон как Qt)? И даже почитав описание сборки на том же CMake можно увидеть условия для конкретных платформ.

rumgot ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.