LINUX.ORG.RU

В Си предложили добавить switch-case для строк

 , ,


0

3

Привет, чат!

Спустя много лет, в язык Си наконец предложено добавить возможность использовать выражение switch-case для строк. Например, можно будет писать вот такое:

const char *s = get_some_string();

switch(s) {
case "this":
  handle_this();
  break;
case "that":
  handle_that();
  break;
default:
  handle_other();
  break;
}

Таким образом, в Си будет чуть меньше способов отстрелить себе ноги.

Ссылка на предложение: https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3895.pdf



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

ну ... мы пошли другим путем и ... пришли к тому-же!
зю: знал-бы я что это hateyoufeel - прошел-бы мимо :о)

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

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

(существование невыровненных указателей) неопределённое поведение вообще-то.

Существовать как раз могут, писать/читать через них как обычно нельзя, но через memcpy можно. Это специальный интринсик с ослаблением убшных правил. Долгое время это чуть ли не единственное переносимое стандартное средство было для подобных операций(и обхода стрикт алиасинга). Похоже на ложно-положительное, можно как-то так уговорить - https://godbolt.org/z/a4Gss16z4, чтобы не ругалось. Тут https://godbolt.org/z/E85oeE9er видно что для данной архитектуры правильно побайтово разбирать, и компилятор перевёл memcpy как надо.

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

Похоже на ложно-положительное

Существовать как раз могут

Понятно.

https://www.dii.uchile.cl/~daespino/files/Iso_C_1999_definition.pdf, 6.3.2.3 Pointers:

7 A pointer to an object or incomplete type may be converted to a pointer to a different object or incomplete type. If the resulting pointer is not correctly aligned57) for the pointed-to type, the behavior is undefined.

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

Это специальный интринсик с ослаблением убшных правил.

  1. memcpy не обязан быть интринсиком. В твоём же примере можно прямо задействовать memcpy через -fno-builtin-memcpy.
  2. Тут нет ослабления UB-шных правил, потому что UB никакого нет. memcpy принимает на вход указатели на void. Любой указатель на вход преобразуется в указатель на void, к которому нет требований по выравниванию.

Ты правильно написал, что

Более общее и стандартное во всех смыслах - https://godbolt.org/z/7a191vhnM . Не завязано вообще ни на что, и работать будет на любом железе.

r--r--r--
()
Ответ на: комментарий от shdown

Оппа, с одной стороны даже соглашусь, но с другой - сишный стандарт специфичная мутная писанина с кучей исключений. И санитайзер таки замолчал. Давай более корректно оформим - https://godbolt.org/z/zj8YW17nP, но идея правильная и это лучше чем gcc специфичный аттрибут. Но вот же проклятый язычок - за счёт похеривания типобезопасности, и теперь то ли надо отдельным аргументом размер таскать, то ли через имя функции напоминать что это для конкретного типа. И раз уж ты вспомнил раст, в нём указатели (в отличие от ссылок) могут быть невыровненными (почему видать меня и переклинило), так что вот он более системный язык, с чем и поздравляю.

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

нём указатели (в отличие от ссылок) могут быть невыровненными

Да, но нет. Невыровненный указатель может быть невалидным указателем. Чтобы быть валидным он должен быть корректно выровнен.

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

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

r--r--r--
()

В Фортране уже давно есть! Сишники - те ещё тугодумы :)

seiken ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.