gcc提示:parameter has just a forward declaration

摘要:这是一条gcc编译程序之后的提示“参数仅仅拥有一个前置声明”


1.问题来源


有如下程序,我们使用gcc编译:

#include<stdio.h>
  2 int fun(int i,int a;int b)
  3 {
  4 
  5 }
  6 int main(int argc, char *argv[])
  7 {
  8   int a=1,b=2;
  9   return 0;
 10 }

出现如下提示:

$ gcc test.c 
test.c:2:19: error: parameter ‘a’ has just a forward declaration
test.c:2:13: error: parameter ‘i’ has just a forward declaration

问题分析,细心查看就会发现,这是因为a后面是“;”而不是“,”所导致的。 它使用了一个被称为GNU C拓展语法里面的 parameter forward declaration feature的特性。


2.特性介绍


这个特性允许 你能够在实际的形参之前,提前声明一些变量。这种特性常常用于那些具有变长数组的参数的函数的声明之中,例如:

// valid, len parameter is used after its declaration 
void foo(int len, char data[len][len]) {}  

// not valid, len parameter is used before its declaration
void foo(char data[len][len], int len) {}

// valid in GNU C, there is a forward declaration of len parameter
// Note: foo is also function with two parameters
void foo(int len; char data[len][len], int len) {}  
这样定义是不对的:

void fun(int i; int i) {}
因为没有i作为前置声明,并没有在后续的参数中得到体现。另外需要注意,这是GNU C的拓展语法,并不是标准C的语法问题。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值