限制为数组大小的目的是什么?

时间:2018-10-09 15:25:42

标签: 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;
}

使用gcc main.c -Wall -Wextra -Werror -pedantic

成功编译

在这种情况下,限制工作如何进行并由编译器解释?

gcc版本:5.4.0

2 个答案:

答案 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)

来自restrict type qualifier

  

在函数声明中,关键字limit可能出现在方括号内,该方括号用于声明函数参数的数组类型。它限定了将数组类型转换为的指针类型:

示例:

void f(int m, int n, float a[restrict m][n], float b[restrict m][n]);