GCC 4.7 Кодирование кодирования и кодирования исходного кода для строковых литералов?

Есть ли в GCC 4.7 на Linux/x86_64 кодировка символов по умолчанию, посредством которой она проверяет и декодирует содержимое строковых литералов в исходных файлах C? Это настраивается?

Кроме того, при связывании строковых данных из строковых литералов в секцию данных вывода имеет ли она по умолчанию кодировку символов выполнения? Это настраивается?

В любой конфигурации можно ли иметь кодировку исходного кода, которая отличается от кодировки символа выполнения? (Это будет gcc когда-либо перекодировать между кодировками символов?)

Ответ 1

Я не знаю, насколько хорошо эти параметры работают (не используя их atm, я по-прежнему предпочитаю обрабатывать строковые литералы как "только ASCII", поскольку локализованные строки поступают из внешних файлов, так что в основном это такие вещи, как строки форматирования или имена файлов), но они добавили такие опции, как

-fexec-charset=charset
Set the execution character set, used for string and character constants. The default
is UTF-8. charset can be any encoding supported by the system iconv library routine. 

-fwide-exec-charset=charset
Set the wide execution character set, used for wide string and character constants.
The default is UTF-32 or UTF-16, whichever corresponds to the width of wchar_t. As
with -fexec-charset, charset can be any encoding supported by the system iconv
library routine; however, you will have problems with encodings that do not fit
exactly in wchar_t.

-finput-charset=charset
Set the input character set, used for translation from the character set of the
input file to the source character set used by GCC. If the locale does not specify,
or GCC cannot get this information from the locale, the default is UTF-8. This can
be overridden by either the locale or this command line option. Currently the command
line option takes precedence if there a conflict. charset can be any encoding
supported by the system iconv library routine.