2016-08-16 2 views
-1

С Язык программирования C, с помощью KRCконкатенации двух строк в одну в С

Учитывая определение

#define tempfile(dir) #dir "%s" 

макро вызова временный файл (/ USR/TMP) дает

"/usr/tmp" "%s" 

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

Какое из правил соответствует конкатенация двух строк в конце?

Является ли правило для макросов в препроцессинге или для строк в C в компиляции?

ответ

3

Это происходит согласно одной из фаз перевода.

Цитирование C11, глава §5.1.1.2/P1.4 и P1.6, (в соответствии с порядком)

директивы Предварительная обработка выполняются, макро вызовы будут расширены, и унарный оператор _Pragma выражения выполняются. [...]

и

соседних строковые лексемы, сцепляются.

+0

Я бы добавил, что предварительная обработка завершена в конце фазы 4, а конкатенация происходит на этапе 6. Также это пункт 6 пункта 1, а не пункт 6. – user694733

Смежные вопросы