我了解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;
}
使用gcc main.c -Wall -Wextra -Werror -pedantic
在这种情况下,限制工作如何进行并由编译器解释?
gcc版本:5.4.0
答案 0 :(得分:8)
首先
char* foo(char s[restrict], int n) { ....
与
相同 char* foo(char * restrict s, int n) {...
根据C11
,第6.7.6.2章
[...]可选类型限定符和关键字
static
仅出现在 具有数组类型的函数参数的声明,然后仅在最外面 数组类型推导。
在此处使用restricted
的目的是向编译器提示,对于函数的每次调用,实际参数只能通过指针s
进行 访问。
答案 1 :(得分:4)
在函数声明中,关键字limit可能出现在方括号内,该方括号用于声明函数参数的数组类型。它限定了将数组类型转换为的指针类型:
示例:
void f(int m, int n, float a[restrict m][n], float b[restrict m][n]);