我正在尝试使用编译附带的C代码


  gcc -Wall -o nesta.o nesta.c


但出现以下错误:


nesta.c: At top level:
nesta.c:1004:15: error: expected identifier or ‘(’ before ‘double’
void restrict(double *coarse, double *fine,int imaxc,int jmaxc,int imaxf,int jmaxf)



作为附带说明,这是一个古老的C程序,曾经在1997年使用。

nesta.c
praxis.h

最佳答案

从错误消息来看,您的代码似乎使用了功能名称restrict

C99将该关键字作为关键字引入。

您需要在(非常)短期内在编译器中强制使用C90模式。在中期,您需要重命名该函数,使其与关键字不匹配。

这就是为什么标准委员会不愿意添加关键字的原因。他们破坏了现有的工作代码(但至少是一个嘈杂的破坏)。该代码在C99标准最终定稿之前于1997年开始工作并非不合理–不再编译也不无道理。 restrict成为该标准的一部分已有近20年的历史了。

10-08 15:14