универсальные символы
От: Аноним  
Дата: 03.03.04 08:40
Оценка:
Формально, содержит ли такая программа UB

int main()
{
   /*asdasdasdasdasd\\
u1233asdasdasd*/
}

На стадии трансляции 2 строки в комментарии соединятся, получается универсальный символ — UB или нет?
Re: универсальные символы
От: dupamid Россия  
Дата: 03.03.04 10:38
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Формально, содержит ли такая программа UB


А>
А>int main()
А>{
А>   /*asdasdasdasdasd\\
А>u1233asdasdasd*/
А>}

А>

А>На стадии трансляции 2 строки в комментарии соединятся, получается универсальный символ — UB или нет?

Там же английским по белому написано 2.1\2:
Each instance of a new-line character and an immediately preceding backslash character is deleted, splicing physical source lines to form logical source lines. If, as a result, a character sequence that matches the syntax of a universal-character-name is produced, the behavior is undefined. If a source file that is not empty does not end in a new-line character, or ends in a new-line character immediately preceded by a backslash character, the behavior is undefined.

Или я не понимаю вопроса? Скорее всего в дальнейшем в этом месте будет conditionally-supported behavior (т.е. реализация или понимает это как implementation-defined behavior или дает ошибку).
Re[2]: универсальные символы
От: Аноним  
Дата: 03.03.04 12:34
Оценка:
D>Или я не понимаю вопроса? Скорее всего в дальнейшем в этом месте будет conditionally-supported behavior (т.е. реализация или понимает это как implementation-defined behavior или дает ошибку).

Да, Вы правы, просто меня смутило именно нахожение такого символа в комментарии, хотя, как следует из последовательности стадий трансляции, здесь еще вообще нет понятия комментарий-не комментарий.

Еще вопрос. Что означает физически что символы исходного файла отображаются на множество базовых символов (т.е. mapped in implementation-dependend manner into basic source character set) и что означает "символы новой строки добавляются, если это необходимо"?
Что за символы не из базового набора могут быть в файле (т.е. я имею в виду те символы, которые должны заменяться на universal character name либо на internal encoding)?
Re[3]: универсальные символы
От: dupamid Россия  
Дата: 03.03.04 13:14
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Еще вопрос. Что означает физически что символы исходного файла отображаются на множество базовых символов (т.е. mapped in implementation-dependend manner into basic source character set) и что означает "символы новой строки добавляются, если это необходимо"?

А>Что за символы не из базового набора могут быть в файле (т.е. я имею в виду те символы, которые должны заменяться на universal character name либо на internal encoding)?

Это означает, что во входном файле символы могут быть записаны как-то по другому (например, в другой кодировке, где есть не все символы из базовго набора но, но есть и другие символы, которые преобразуются в недостающие символы базового набора). Т.е. при такой формулировке реализация может почти что угодно преобразовывать во что угодно, обычно ничего из этого делать не нужно. А вот с концом строк все просто: по стандарту это один символ, но в DOS например, это два символа, поэтому требуется такое преобразование для того чтобы дальше был одиночный псевдосимвол конец-строки. Пример символов не из базового набора — это русские симоволы
Re[4]: универсальные символы
От: Аноним  
Дата: 03.03.04 13:22
Оценка:
Спасибо.
Re[4]: универсальные символы
От: Аноним  
Дата: 03.03.04 13:30
Оценка:
Рискуя показаться назойлитвым спрошу еще :

директивы препроцессора и токены из макросов при выделении токенов препроцессирования на стадии 3 к какому типу относятся? к идентификаторам вроде не подходят , к разделу each non-white — space character ? или они не считаются токенами препроцессирования?

new/delete на этой стадии относится к идентификаторам?

Определение идентификатора в 2.10 относится и к токенам препроцессирования(2.4) и к токенам из 2.6 ?
Re[2]: универсальные символы
От: Ivan A. Kosarev  
Дата: 04.03.04 09:56
Оценка:
Здравствуйте, dupamid, Вы писали:

А>>
А>>int main()
А>>{
А>>   /*asdasdasdasdasd\\
А>>u1233asdasdasd*/
А>>}

А>>

А>>На стадии трансляции 2 строки в комментарии соединятся, получается универсальный символ — UB или нет?

D>Там же английским по белому написано 2.1\2:

D>[i]Each instance of a new-line character and an immediately preceding backslash

По C99 UCNs в комментариях не распознаются.
Re[5]: универсальные символы
От: dupamid Россия  
Дата: 04.03.04 10:12
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Рискуя показаться назойлитвым спрошу еще :


А>директивы препроцессора и токены из макросов при выделении токенов препроцессирования на стадии 3 к какому типу относятся? к идентификаторам вроде не подходят , к разделу each non-white — space character ? или они не считаются токенами препроцессирования?


А>new/delete на этой стадии относится к идентификаторам?


А>Определение идентификатора в 2.10 относится и к токенам препроцессирования(2.4) и к токенам из 2.6 ?


Ты пытаешся увидеть проблемы там где их нет

Как все происходит в C++ слегка упрощенно: читаем текст во входной кодировке, все символы, которые мы считаем, что преобразуются в базовый набор символов туда преобразуются (в том числе концы строк, какой бы символ или символы в исходном тексте для их обозначения не использовался), а остальные кодируются как UCN. Причем реализация может как работать внутри себя с UCN так и использовать какой-то другой способ их представления, до тех пор пока результат получается как если бы были UCN (это основной принцып стандарта). Например, удобно использовать внутри wchar_t, мультибайтовые кодировки менее удобны, но тоже могут использоваться.

Склеиваются строки (получатся UCN или нет не определено). Происхродит выделение токенов препроцессрования. Это имя заголовочного файла в <>, идентификатор в соответствии с 2.10 (включая UCN), pp-number (числа в препроцессоре), сивольные литералы, строковыке литералы, пунктуаторы-операторы (которые включают в себя альтернативные предстовления части символьных пунктуаторов (типа and, or) и new delete, которые считаются операторами (это не идентификаторы по С++!)). Запускается макропроцессор, обрабатываются инклуды, в строковых и символьных литералах все преобразуется в набор символов исполняющей машины, смежные строки склеиваются, токены препроцессирования преобразуются в обычные токены (идентификаторы, ключевые слова, литералы, операторы, пунктуаторы).

Возможно в С++ скоро будет с UCN так же как в С. Языки идут на сближение и вэтом вопросе скорее всего будет выборан подход С, а в С, как правильно заметил Иван, с UCN дела обстоят чуть-чуть по-другому.
Re[6]: универсальные символы
От: Аноним  
Дата: 04.03.04 10:17
Оценка:
Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.