Как происходит преобразование к source character set при включении файлов?

У меня есть A.cpp файл в кодировке X, в него включается хедер B.h с кодировкой Y, в этот хедер B.h включается хедер C.h с кодировкой Z. Что происходит с кодировками файлов при таком включении для компилятора gcc с опцией -finput-charset=X?

Правильно ли я понимаю, что сначала, т.к. #include выполняется рекурсивно, байты C.h приводятся из Z в Y, а потом байты B.h с включенным C.h из Y преобразуются в X? Либо же Z сразу приводится к X? Или преобразований кодировок нет вовсе? Что тогда означает mapping/convert к source character set?

The individual bytes of the source code file are mapped (in implementation-defined manner) to the characters of the basic source character set..

The files input to CPP might be in any character set at all. CPP’s very first action, before it even looks for line boundaries, is to convert the file into the character set it uses for internal processing.

По какому алгоритму происходит этот mapping и могут ли быть ошибки при нём?


Ответы (1 шт):

Автор решения: user7860670

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

→ Ссылка