我现在正在做一些代码并使用restrict关键字遇到了一些问题。
typedef int* pt;
int foo(pt a, pt b)
{
... /* stuff */
}
如果我想限制a和b怎么办?以下代码失败:
typedef int* pt;
int foo(pt restrict a, pt restrict b)
{
... /* stuff */
}
提前致谢。
答案 0 :(得分:2)
确保使用编译器的C99标志对其进行编译。 C89 C中不存在restrict
关键字。
答案 1 :(得分:1)
快速查看并阅读类似的SO question,代码就是,因为关键字'restrict'在C ++编译器中不是保留关键字,如上面linky中接受的答案所示,{{{ 1}}或__restrict
,再次检查你的编译器......
__restricted__
答案 2 :(得分:0)
你需要一个“指向整数的限制指针”int * restrict p
而不是“指向受限整数的指针”restrict int *p
所以你需要制作另一个typedef。你不能“伸手”到原来的那个。
编辑:虽然你无法到达typedef内部并且修饰符将始终应用于顶级,但在这种情况下,事实证明你想要顶级restrict
。这与人们通常遇到const
的情况相反:typedef char *char_ptr
表示const char_ptr
(或char_ptr const
,它们是等效的)都意味着“常量指向char”而不是“指向常量字符的指针“这是人们想要的。 (另请参见此SO主题:C++ typedef interpretation of const pointers)
因此,在这种情况下,我认为typedef int *pt
确实意味着restrict pt
表示int * restrict pt
。这很容易验证,因为gcc会抱怨“{1}}无效使用'restrict'”,但restrict int *x
没有。