Есть одно очень удобное использование унарного оператора плюс, о котором я знаю: в макросах.Предположим, вы хотите сделать что-то вроде
#if FOO > 0
Если FOO
не определено, язык C требует, чтобы его в этом случае заменили на 0.Но если FOO
было определено с пустым определением, указанная выше директива приведет к ошибке.Вместо этого вы можете использовать:
#if FOO+0 > 0
И теперь директива будет синтаксически правильной независимо от того, является ли FOO
неопределенным, определенным как пустое или определенным как целочисленное значение.это даст желаемую семантику - это совершенно отдельный вопрос, но в некоторых полезных случаях это будет.
Редактировать: Обратите внимание, что вы даже можете использовать это для различения случаи, когда FOO
определяется как ноль, а не как пробел, например:
#if 2*FOO+1 == 1
/* FOO is 0 */
#else
/* FOO is blank */
#endif