Nic*_*k S 8 c gcc restrict-qualifier
我理解是什么restrict意思,但我对这种用法/语法有点困惑:
#include <stdio.h>
char* foo(char s[restrict], int n)
{
printf("%s %d\n", s, n);
return NULL;
}
int main(void)
{
char *str = "hello foo";
foo(str, 1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
成功编译 gcc main.c -Wall -Wextra -Werror -pedantic
在这种情况下如何限制工作并由编译器解释?
gcc版本:5.4.0
首先,
char* foo(char s[restrict], int n) { ....
Run Code Online (Sandbox Code Playgroud)
是相同的
char* foo(char * restrict s, int n) {...
Run Code Online (Sandbox Code Playgroud)
根据C11章节§6.7.6.2 允许语法
[...]可选类型限定符和关键字
static只出现在具有数组类型的函数参数的声明中,然后仅出现在最外层的数组类型派生中.
这里的目的restricted是提示编译器,对于函数的每次调用,实际参数只能通过指针访问s.
在函数声明中,关键字restrict 可能出现在用于声明函数参数的数组类型的方括号内。它限定了数组类型转换为的指针类型:
和例子:
void f(int m, int n, float a[restrict m][n], float b[restrict m][n]);
Run Code Online (Sandbox Code Playgroud)