我现在正在执行一些代码,并使用限制关键字遇到了一些问题。

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 */
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top