A char *
(и квалифицированные варианты) могут быть псевдонимом. Есть signed char *
и unsigned char *
(и их квалифицированные варианты) освобождены от этого?Псевдонимы с символом char *, unsigned char * и подписанным символом *
Другими словами, я узнал, что это хорошая идея, чтобы применить restrict
к char*
аргументы функции, если я не ожидаю их псевдонимов параметров указателя других типов (потому что они могут их псевдоним):
int func(struct foo *f, char * restrict s /*different object*/);
Могу ли я отбросить ключевое слово restrict
для вариантов с подписью и без знака?
int sfunc(struct foo *f, signed char *s /*different object*/);
int ufunc(struct foo *f, unsigned char *s /*different object*/);
Также могут указатели на подписанные и неподписанные варианта одного и того же типа псевдоним друг друга? Другими словами, если я ожидаю указатель на int и указатель на unsigned, и они должны указывать на разные объекты, должны ли параметрыи unsigned *
быть restrict
-qualified?
/* i and u should be different */
int uifunc(int * /*restrict?*/ i, unsigned * /*restrict?*/ u);
Примечание: «Ограничить» в прототипе не имеет значения (хотя он служит в документации) - только версия в определении функции имеет эффект –