LINUX.ORG.RU

typedef + const в C

 , ,


0

1

Доброго времени суток!

Сейчас набрел на кусок кода:

typedef char * string_t;
typedef const string_t const_string_t;

/* Подразумевалось
 * const char * const strings[] = { ... }
 */
static const const_string_t strings[] = { "foo", "bar", "baz" };

GCC (MinGW 4.9.2) с -Wall -Wextra -pedantic не ругается на:

strings[0][0] = 'E';
Но по запуску тестовой программы падает с сегфолтом (вестимо потому, что строки были сохранены в рид-онли секцию).

Помнится мне, что typedef как-то хитро игнорирует const (в GCC?). Ткните пожалуйста в место стандарте С, чтоб я понял где ошибка!

Ты путаешь константный указатель и указатель на константу. В твоём случае нужно:

typedef char * string_t;
typedef const char * const_string_t;

твоё же определение эквивалентно:

typedef char * string_t;
typedef char * const const_string_t;

runtime ★★★★
()
Последнее исправление: runtime (всего исправлений: 3)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.