LINUX.ORG.RU

История изменений

Исправление firkax, (текущая версия) :

По ссылке на странице 93 написано, что это UB:

«invalid» это не UB, а «не скомпилируется»

При этом вариант типа var = {.arr[ SIZE ]=«text»}; не компилируется.

тут [SIZE] это не размер массива а индекс в нём, разумеется присвоить символу указатель нельзя (без тайпкаста)

то есть gcc предполагает, что в таком случае память выделяется под один char, даже если SIZE равен 4 или 11. Судя по объектному файлу - действительно, место выделяется под один символ. Получается, что решение является нерабочим: можно указать хоть SIZE=1000, но память будет выделена только для одного элемента.

Ничего не понятно. gcc для этой конструкции выделяет SIZE+1 байт, в послений из которых записывает то что после знака равенства (потому что это инициализация SIZE-ного элемента массива). Чтобы инициализировать весь массив, а не символ, надо писать .arr = «text» (будет 5 байт, указать явно нельзя).

Исправление firkax, :

По ссылке на странице 93 написано, что это UB:

«invalid» это не UB, а «не скомпилируется»

При этом вариант типа var = {.arr[ SIZE ]=«text»}; не компилируется.

тут [SIZE] это не размер массива а индекс в нём, разумеется присвоить символу указатель нельзя (без тайпкаста)

то есть gcc предполагает, что в таком случае память выделяется под один char, даже если SIZE равен 4 или 11. Судя по объектному файлу - действительно, место выделяется под один символ. Получается, что решение является нерабочим: можно указать хоть SIZE=1000, но память будет выделена только для одного элемента.

Ничего не понятно. gcc для этой конструкции выделяет SIZE+1 байт, в послений из которых записывает то что после знака равенства (потому что это инициализация SIZE-ного элемента массива)

Исправление firkax, :

По ссылке на странице 93 написано, что это UB:

«invalid» это не UB, а «не скомпилируется»

При этом вариант типа var = {.arr[ SIZE ]=«text»}; не компилируется.

тут [SIZE] это не размер массива а индекс в нём, разумеется присвоить символу указатель нельзя (без тайпкаста)

Исходная версия firkax, :

По ссылке на странице 93 написано, что это UB:

«invalid» это не UB, а «не скомпилируется»