Цитата(Nick_Shl @ May 27 2008, 13:46)

А мне больше такая:
Код
#define PORTX.Y(x) PORTX = (PORTX & ~(1 << Y)) | (x << Y)
Это для конкретного порта и пина. x должен быть или 0 или 1.
По стандарту С (и С++) после #define должен быть ИДЕНТИФИКАТОР, т.е. нечто, состоящее из букв (английских), цифр и знака '_'. Точка ('.') к этому набору не относится, так что ЛЮБОЙ С компилятор имеет полное право обругаться на эту конструкцию, или трактовать ее как
Код
#define PORTX .Y(x) PORTX = (PORTX & ~(1 << Y)) | (x << Y)
что для PORTX.Y(1) будет раскрываться в
Код
.Y(x) PORTX = (PORTX & ~(1 << Y)) | (x << Y) .Y(1)
что явно не то, что хотел автор
Цитата
Использовал в CodeVision
Очень повезло, что CodeVision разрешил точку в имени define'а, gcc (он же WinAvr) трактовал это иначе