Правила программирования на Си и Си++



         

45.2. Не используйте заглавных букв в именах типов, созданных при помощи 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

);

Имя типа из строчных букв не вызовет никаких проблем при чтении, потому что по смыслу вы всегда можете сказать, используется ли оно для типа или нет.




Содержание  Назад  Вперед