限制现在我做了一些代码,并使用了关键字限制一些问题。C带的typedef
typedef int* pt;
int foo(pt a, pt b)
{
... /* stuff */
}
如果我想限制a和b,该怎么办?代码如下失败:
typedef int* pt;
int foo(pt restrict a, pt restrict b)
{
... /* stuff */
}
在此先感谢。
限制现在我做了一些代码,并使用了关键字限制一些问题。C带的typedef
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
,他们当量)都表示“恒字符指针”而不是“指针定焦”,这是人们所希望的。 (另见本SO主题:C++ typedef interpretation of const pointers)
因此,在这种情况下,我觉得typedef int *pt
是否意味着restrict pt
意味着int * restrict pt
。这是很容易验证,因为GCC会抱怨为restrict int *x
而不是restrict pt x
“无效使用的‘限制’”。
上帝......我需要大量的黑客然后 – rogi 2010-11-13 23:46:30
你能否请克莱里?为什么'pt restrict'不表示'int * restrict'类型?我认为这个答案是错误的。 – 2010-11-13 23:54:38
@Johannes:假设'restrict' “传播” 一样'const',你是正确的:'static_assert(标准:: is_same
有一个快速浏览和阅读此类似SO question存在,代码会是这样,作为关键字“限制”在C++编译器不保留的关键字,通过接受的答案指示在上述linky,无论是__restrict
或__restricted__
,再次检查你的编译器...
typedef int* __restrict pt;
int foo(pt a, pt b)
{
... /* stuff */
}
嗯这可能会帮助很多。谢谢! – rogi 2010-11-14 00:06:09
我在[一个问题](http://stackoverflow.com/q/43631062/2542702)中使用了你的答案,每个人都说这是一个非常糟糕的主意。你能评论我的问题吗? – 2017-04-27 07:04:46
你需要“的失败的码”更准确地说,你是什么意思。 – 2010-11-13 23:42:34
FWIW,你的代码用GCC编译得很好。 – 2010-11-14 00:13:24