天天看點

gcc提示:parameter has just a forward declaration1.問題來源2.特性介紹

摘要:這是一條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) {}  
           

這樣定義是不對的:

因為沒有i作為前置聲明,并沒有在後續的參數中得到展現。另外需要注意,這是GNU C的拓展文法,并不是标準C的文法問題。

繼續閱讀