题
我现在正在执行一些代码,并使用限制关键字遇到了一些问题。
typedef int* pt;
int foo(pt a, pt b)
{
... /* stuff */
}
如果我想限制A和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”而不是“指向Constant Char”,这就是人们想要的。 (另请参阅此SO线程: C ++ Typedef const指针的解释 )
所以在这种情况下,我认为 typedef int *pt
确实是意思 restrict pt
方法 int * restrict pt
. 。验证非常容易,因为海湾合作委员会会抱怨“限制'无效” restrict int *x
但不适合 restrict pt x
.
其他提示
确保您使用编译器的C99标志对其进行编译。这 restrict
C89 C中不存在关键字。
快速看和阅读此类似 所以问题, ,该代码将是,因为关键字“限制”不是C ++编译器中保留的关键字,如以上链接中所接受的答案所示, __restrict
或者 __restricted__
, ,再次检查您的编译器...
typedef int* __restrict pt;
int foo(pt a, pt b)
{
... /* stuff */
}
不隶属于 StackOverflow