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

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

Sou*_*osh 8

首先,

  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.


Mik*_*han 5

限制类型限定符

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

和例子:

void f(int m, int n, float a[restrict m][n], float b[restrict m][n]);
Run Code Online (Sandbox Code Playgroud)