C使用typedef进行限制

时间:2010-11-13 23:38:05

标签: c typedef restrict-qualifier

我现在正在做一些代码并使用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 */
}

提前致谢。

3 个答案:

答案 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没有。