Не используйте заглавных букв в именах типов, созданных при помощи typedef
Так как макрос также может использоваться в манере, подобной typedef, то полезно знать может или нет что-то быть использовано в качестве синтаксически правильного типа. Например, имея:
typedef void (*ptr_to_funct)(int );
вы можете написать следующее:
(ptr_to_funct)( p ); // преобразует p в указатель на функцию
ptr_to_funct f(long); // f возвращает указатель на функцию
Макрос типа:
#define PTR_TO_FUNCTION void (*) (int
)
позволяет вам сделать преобразование:
(PTR_TO_FUNCTION) ( p );
но не позволяет объявить функцию:
PTR_TO_FUNCTION f(long);
Указанный макрос при подстановке дает:
void (*) (int ) f(long);
но компилятору нужно:
void (*f(long))(int
);
Имя типа из строчных букв не вызовет никаких проблем при чтении, потому что по смыслу вы всегда можете сказать, используется ли оно для типа или нет.