Суффикс - это что-то «добавленное в конце». Поэтому, когда компилятор жалуется на недопустимом суффикс в конце целой константы, это расстроено одного лексем
10CELSIUS
как он признает CELSIUS
в качестве целого суффикса. Допустимые суффиксы (N1570 § 6.4.4.1/1):
u
ul
ull
l
lu
ll
llu
Это небольшие L буквы, вверх случай версии каждой буквы допускается, тоже (хотя и не lL
Ll
или в любой комбинации)
Они означают ¯u nsigned, л Ong и л Ong л Ong и влияют на тип предыдущего целая константа.
Таким образом, для достижения Макроподстановки вам нужно separate the integer constant with a space, таким образом, производя маркер CELSIUS
, который затем может быть заменен *10
препроцессор:
#include <stdio.h>
#define CELSIUS *10
int main()
{
int testVar=0;
if(!testVar) testVar = 10 CELSIUS;
printf("%d\n", testVar);
return 0;
}
Примечания: Это более современные подписи для основных функция. Еще лучше (ИМО) будет int main(int argc, char **argv);
Вы определяете 'CELSIUM' и использовать' CELSIUS', это опечатка? – Caw
«Но похоже, что программа компилируется». [Это всего лишь иллюзия; он не компилируется] (http://ideone.com/IlncHy). – dasblinkenlight
CELSIUM был ошибкой. Я отредактировал его. – xy36