如何使用C关键字restrict正确修饰return指针?
How to use C keyword restrict to decorate return pointer correctly?
在一些文档中,我了解到我们应该使用'restrict'来修饰函数参数或内存分配语句。像这样:
void(int*restrict paraA){}
int*restrict A = (int*)malloc(10 * sizeof(int);
而且我对 'restricted' 指针是否可以被任何函数 return 感到困惑。
这里我有一个函数 funcA:
int* funcA(paraA, paraB){
int*restrict result = (int*)calloc(10,sizeof(int));
......
return result;
}
我可以像这样使用 return 指针吗?会安全吗?
void funcB(){
int*restrict pA = funcA(0, 0);
pA[0] = 1;
}
在msvc中,我了解了__declspec(restrict)
。
我应该在 gcc 中使用 __declspec(restrict) int* funcA()
还是 int*restrict funcA()
?
如果我想在 Python 中使用 funcA,与 declspec(dllexport) int* funcA()
相比,__declspec(dllexport,restrict) int* funcA()
会影响 Python 中的结果吗?
这种restrict
的用法没有多大意义。只有当您有两个或多个指向兼容类型的指针并且编译器无法知道它们是否可能指向同一对象时,该关键字才有用。或者,如果它们可能指向同一翻译单元中具有外部链接(“全局”)的对象。更多详情 .
在funcA
中,指针与程序中的任何其他指针或对象没有任何关系,因为它被分配给函数内部的动态内存。 restrict
在该函数中没有任何明显的用途。
在一些文档中,我了解到我们应该使用'restrict'来修饰函数参数或内存分配语句。像这样:
void(int*restrict paraA){}
int*restrict A = (int*)malloc(10 * sizeof(int);
而且我对 'restricted' 指针是否可以被任何函数 return 感到困惑。 这里我有一个函数 funcA:
int* funcA(paraA, paraB){
int*restrict result = (int*)calloc(10,sizeof(int));
......
return result;
}
我可以像这样使用 return 指针吗?会安全吗?
void funcB(){
int*restrict pA = funcA(0, 0);
pA[0] = 1;
}
在msvc中,我了解了__declspec(restrict)
。
我应该在 gcc 中使用 __declspec(restrict) int* funcA()
还是 int*restrict funcA()
?
如果我想在 Python 中使用 funcA,与 declspec(dllexport) int* funcA()
相比,__declspec(dllexport,restrict) int* funcA()
会影响 Python 中的结果吗?
这种restrict
的用法没有多大意义。只有当您有两个或多个指向兼容类型的指针并且编译器无法知道它们是否可能指向同一对象时,该关键字才有用。或者,如果它们可能指向同一翻译单元中具有外部链接(“全局”)的对象。更多详情
在funcA
中,指针与程序中的任何其他指针或对象没有任何关系,因为它被分配给函数内部的动态内存。 restrict
在该函数中没有任何明显的用途。