C Ограничить с помощью Typedef
-
09-10-2019 - |
Вопрос
Я сейчас делаю код и получил некоторую проблему, используя ограничить ключевое слово.
typedef int* pt;
int foo(pt a, pt b)
{
... /* stuff */
}
Что если я хочу сделать и B ограниченным? Не удалось: код ниже:
typedef int* pt;
int foo(pt restrict a, pt restrict b)
{
... /* stuff */
}
Заранее спасибо.
Решение
Вам нужен «ограниченный указатель на целое число» int * restrict p
не «указатель на ограниченное целое число» restrict int *p
Таким образом, вам нужно будет сделать еще один typedef. Вы не можете «достичь внутри» оригинального.
Редактировать: пока это правда, что вы не мочь достичь внутри Typedef и модификатор всегда будет применяться на верхнем уровне, в этом случае оказывается, что вы хотеть то restrict
на верхнем уровне. Это обратное о том, что люди обычно бегают с const
: typedef char *char_ptr
означает const char_ptr
(или char_ptr const
, они эквивалентны) оба подразумевают «постоянный указатель для CHAR», а не «указатель постоянному символу», что хочет люди. (См. Также это так поток: C ++ Typedef Интерпретация указателей Const )
Так что в этом случае я думаю typedef int *pt
Значит это restrict pt
означает int * restrict pt
. Отказ Это довольно легко проверить, потому что GCC будет жаловаться на «Недопустимое использование« ограничения »» restrict int *x
Но не для restrict pt x
.
Другие советы
Убедитесь, что вы собираете его с помощью флага C99 для вашего компилятора. То restrict
Ключевое слово не существует в C89 C.
Быстро выглядеть и читаю это похоже Поэтому вопрос, код будет, поскольку ключевое слово «restrict» не зарезервировано ключевое слово в компиляторах C ++, как указано принятым ответом в приведенном выше ссылках, либо __restrict
или __restricted__
, Опять же, проверьте ваш компилятор ...
typedef int* __restrict pt;
int foo(pt a, pt b)
{
... /* stuff */
}