Оператор Stringizing (|)

Номер-знак или «stringizing оператор (»**#**преобразование параметров макроса) к строковым литералы без развернуть определение параметра.Используется только с макросами, которые принимают аргументы.Если предшествует формальный параметр в определении макроса, фактический аргумент, передаваемый вызовом макроса заключены в кавычки и обработал как строковый литерал.Строковый литерал затем заменяет каждое вхождение сочетание stringizing оператор и формальный параметр в определении макроса.

ПримечаниеПримечание

Расширение microsoft c# (версии 6,0 и более ранних версий) к стандарту ANSI c, который уже развернул строковые литералы формальных аргументов макроса отображаются внутренние и символьные константы больше не поддерживается.Код, положился в этом модуле должен быть переписан с помощью stringizing (#оператор).

Игнорируется пробел перед первый токен фактического аргумента и после последнего токена фактического аргумента.Любой пробел между токенами в фактическом аргументе уменьшается на один пробелы в результирующий строковый литерал.Таким образом, если комментарий, происходящего между 2 токенами в фактическом аргумента, уменьшается на один пуст.Результирующий строковый литерал автоматически сцепленн со всеми соседними строковыми литералами, из которых он только отделен пробелом.

Более того, если символ, содержащийся в аргументе обычно требует escape-последовательности, то при использовании в строковом литерале (например, кавычек («обратная косая черта) или (**\**обязательная)), обратная косая черта escape автоматически вставляется перед знаком.

Оператор Visual C++ stringizing не может функционировать должным образом во всех случаях. см. 16.3.2 | - Оператор для получения дополнительных сведений.

Пример

В следующем примере показано определение макроса, который включает stringizing оператор и функцию main, которая вызывает макроса:

Такие вызовы будут развернуты во время предварительной обработки, создавая следующий Код:

int main() {
   printf_s( "In quotes in the printf function call\n" "\n" );
   printf_s( "\"In quotes when printed to the screen\"\n" "\n" );
   printf_s( "\"This: \\\" prints an escaped double quote\"" "\n" );
}

// stringizer.cpp
#include <stdio.h>
#define stringer( x ) printf_s( #x "\n" )
int main() {
   stringer( In quotes in the printf function call ); 
   stringer( "In quotes when printed to the screen" );   
   stringer( "This: \"  prints an escaped double quote" );
}
  

Следующий пример показывает, как можно развернуть параметр макроса:

// stringizer_2.cpp
// compile with: /E
#define F abc
#define B def
#define FB(arg) #arg
#define FB1(arg) FB(arg)
FB(F B)
FB1(F B)

См. также

Ссылки

Операторы препроцессора