Перейти к содержанию
    

Си строки. Мир рухнул...

4 минуты назад, demiurg_spb сказал:

Дайте ссылку что-ли на стандарт где хоть как-то упоминается о том что Си приводит  char const * -> char *.

Он не приводит. Цитата из стандарта есть по вашей же ссылке из первого сообщения:

Цитата

5 In translation phase 7, a byte or code of value zero is appended to each multibyte character sequence that results from a string literal or literals. The multibyte character sequence is then used to initialize an array of static storage duration and length just sufficient to contain the sequence. For character string literals, the array elements have type char, and are initialized with the individual bytes of the multibyte character sequence [...]

6 It is unspecified whether these arrays are distinct provided their elements have the appropriate values. If the program attempts to modify such an array, the behavior is undefined.

Да, очень плохо, что вместо 6-го пункта не сделали массив константным, но так уж повелось с самых первых версий.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 минут назад, demiurg_spb сказал:

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

Дайте ссылку что-ли на стандарт где хоть как-то упоминается о том что Си приводит  char const * -> char *.

Я такого не говорил. Я говорил что для foo("...") будет неявное приведение типа char const * литеральной константы "..." к типу char *.

Вы сами в первом посте привели такой пример где у вас было приведение. Или как Вы умудрились передать константную строку в свою функцию foo(char *)???

Либо явно приводили её тип, либо вызывали foo("...").

Какой ещё стандарт нужен? Сами же и привели пример работы в первом посте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ладно. Обсуждать тут больше нечего.

Ко всему можно привыкнуть. Удивляет лишь молчаливая компиляция заведомо нерабочего кода.

Вроде как язык со строгой типизацией, но такой странной...

35 minutes ago, Сергей Борщ said:

Да, очень плохо, что вместо 6-го пункта не сделали массив константным, но так уж повелось с самых первых версий.

Логичнее было бы какой тип слева от равно (const не const) туда и класть элементы.

И тогда всё само собой бы разрулилось.

int printf( const char *format, ... ); // всё бы в RO закинулось, а в моём примере в RW

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...