какая польза от "# @" в языке c? - PullRequest
0 голосов
/ 13 ноября 2018

Символ # используется в начале директив препроцессора (#ifdef, #define и т. Д.). # также используется в качестве оператора строкового преобразования.

## - оператор вставки токена.

Тогда в онлайн-викторине я увидел это:

#define MAKECHAR(operand) #@operand

Какой оператор #@ и для чего он используется?

1 Ответ

0 голосов
/ 13 ноября 2018

Это аналог маркера stringify #, но для символов, но он не стандартизирован.Например, clang / llvm не поддерживает его.

Чтобы показать аналогию:

#define MESSAGE(x) printf("%s: %d\n", #x, x)

int main(){
    int i = 5;
    MESSAGE(i); // expands to printf("%s: %d\n", "i", x)
    return 0;
}

Вывод:

i: 5

С компилятором, поддерживающим #@, вы можете написать:

#define MESSAGE(x) printf("%c: %d\n", #@x, x)

int main(){
    int i = 5;
    MESSAGE(i);  // expands to printf("%c: %d\n", 'i', x)
    return 0;
}
...