История изменений
Исправление Vic, (текущая версия) :
Про выравнивание - тут дело в том, что C лезет не в своё дело. Его дело - компилировать код. Почему Undefined behaviour-то?
Это нюансы разработчиков GCC и их видения. Им надо, чтобы в результате компиляции и вы, другой программист, получили работающий код. Да еще и на разных процессорах. Компилятор же вас не ограничивает, а лишь предупреждает о возможно не выровненном адресе переменной.
Есть общепринятые UB, например, не инициализированная переменная, принадлежащая программе, это UB. А, например, инициализировать память по адресу регистра чтения из условной «микросхемы SPI» (в драйвере), это уже UB с точки зрения правила работы с микросхемой в адресном пространстве.
Про одно адресное пространство не совсем понял.
Это мой комментарий к вашей фразе про «замену Си» и что «все этого хотят».
Все данные и сам код находятся в одном адресном пространстве процессора для работающей программы. Из-за этого и Си и С++ и Паскаль такие, какие есть. Т.е. с возможностью написать программу, меняющую/читающую любой байт в адресном пространстве. Собственно, это их основное назначение, делать именно так.
Поэтому, я не хочу замены Си.
Исходная версия Vic, :
Про выравнивание - тут дело в том, что C лезет не в своё дело. Его дело - компилировать код. Почему Undefined behaviour-то?
Это нюансы разработчиков GCC и их видения. Им надо, чтобы в результате компиляции и вы, другой программист, получили работающий код. Да еще и на разных процессорах. Компилятор же вас не ограничивает, а лишь предупреждает о возможно не выровненном адресе переменной.
Есть общепринятые UB, например, не инициализированная переменная, принадлежащая программе, это UB. А, например, инициализировать память по адресу регистра чтения из условной «микросхемы SPI» (в драйвере), это уже UB с точки зрения правила работы с микросхемой в адресном пространстве.
Про одно адресное пространство не совсем понял.
Это мой комментарий к вашей фразе про «замену Си» и что «все этого хотят».
Все данные и сам код находятся в одном адресном пространстве работающей программы. Из-за этого и Си и С++ и Паскаль такие, какие есть. Т.е. с возможностью написать программу, меняющую/читающую любой байт в адресном пространстве. Собственно, это их основное назначение, делать именно так.
Поэтому, я не хочу замены Си.