Эта конкретная реализация, кажется, хранит многосимвольные константы в формате с прямым порядком байтов.В константе 'ab'
символ 'b'
является наименее значимым байтом (младший конец), а символ 'a'
является наиболее значимым байтом.Если бы вы рассматривали chars
как массив, это были бы chars[0] = 'b'
и chars[1] = 'a'
, и, таким образом, printf рассматривал бы как "ba"
.
Кроме того, я не уверен, насколько вы точнырассмотрим Википедию, но в отношении C синтаксиса она имеет следующий раздел:
Многосимвольные константы (например, 'xy') допустимы, хотя и редко полезны - они позволяют одному хранить несколько символовв целое число (например, 4 символа ASCII могут помещаться в 32-разрядное целое число, 8 в 64-разрядное).Поскольку порядок, в котором символы упакованы в одно целое, не указан, использование многосимвольных констант в переносном режиме затруднено.
Таким образом, следует избегать формата многосимвольных констант 'ab'
.в общем.