Ответ 1
Символ '#' является строкатором - он превращает символ в строку. Код становится
putchar ( "putchar" [3]);
Я наткнулся на следующий код:
#include<stdio.h>
#define d(x) x(#x[3])
int main(){
d(putchar);
}
Что печатает c
как вывод. Интересно, что делает макрос #define d(x) x(#x[3])
? На языке C есть оператор вроде #
? Я могу видеть это внутри тела макроса i.e здесь x(#x[3])
. По моему нормальному глазу он выглядит чем-то другим, я вижу на языке С, но на самом деле. Что это делает?
Изменить: Каково реальное использование #
в реальном мире?
Я новичок в C, и будет хорошо, если объяснение будет простым. Заранее спасибо.
Символ '#' является строкатором - он превращает символ в строку. Код становится
putchar ( "putchar" [3]);
Знак hash означает "stringify", поэтому d(x)
расширяется до putchar("putchar"[3])
, откуда c
.
Из здесь:
Определения макросов функций принимают в качестве замены следующие два специальных оператора (# и ##): Если оператор # используется до того, как параметр используется в заменяющей последовательности, этот параметр заменяется строковым литералом (как если бы он был заключен между двойными кавычками)
#define str(x) #x
cout << str(test);
Проще говоря, он изменяет параметр "x" в строку. В этом случае тест становится массивом char, содержащим 't', 'e', 's', 't', '\ 0'.
#
- это оператор предварительного процессора, который превращает литерал в строку. Фактически, ваш макрос d
печатает четвертый char
преобразованной строки вашего литерала.