程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 關於C中函數聲明與定義

關於C中函數聲明與定義

編輯:關於C語言

首先看下面main.c,test()和add()都未聲明,但編譯時不會報錯


[html]
#include <stdio.h> 
 
void main() 
 

 
    printf("%d\n",test()); 
 

 
 
 
int test() 
 

 
    return add(1,2); 
 

 
 
 
int add(int x,int y) 
 

 
     return x+y; 
 

#include <stdio.h>

void main()

{

 printf("%d\n",test());

}

 

int test()

{

 return add(1,2);

}

 

int add(int x,int y)

{

  return x+y;

}


運行輸出結果為:3

接著修改程序如下:

 

[html]
#include <stdio.h> 
 
void main() 
 

 
    printf("%d\n",test()); 
 

 
 
 
static int test() 
 

 
    return add(1,2); 
 

 
 
 
static int add(int x,int y) 
 

 
    return x+y; 
 

#include <stdio.h>

void main()

{

 printf("%d\n",test());

}

 

static int test()

{

 return add(1,2);

}

 

static int add(int x,int y)

{

 return x+y;

}


編譯時報錯,提示test()和add()未聲明。

為什麼會這個樣子呢,於是我又試著修改了一下程序:


[html]
#include <stdio.h> 
 
void main() 
 

 
    test(); 
 
 
 
void test() 
 

 
    //return add(1,2); 
    add(1,2); 
 

 
 
 
void add(int x,int y) 
 

 
    //return x+y; 
    x+y; 
 

#include <stdio.h>

void main()

{

 test();

 

void test()

{

 //return add(1,2);
 add(1,2);

}

 

void add(int x,int y)

{

 //return x+y;
 x+y;

}

 


這次報錯了,注意了,和第一個例子相比只是將函數返回值不同而己!

接著先給出函數聲明:


[html]
#include <stdio.h> 
 
void test(); 
void add(int x,int y); 
 
 
void main() 
 

 
    test(); 
 

 
 
 
void test() 
 

 
    //return add(1,2); 
    add(1,2); 
 

 
 
 
void add(int x,int y) 
 

 
    //return x+y; 
    x+y; 
 

#include <stdio.h>

void test();
void add(int x,int y);


void main()

{

 test();

}

 

void test()

{

 //return add(1,2);
 add(1,2);

}

 

void add(int x,int y)

{

 //return x+y;
 x+y;

}


編譯順利通過。

總結如下:

1.一般情況下,函數在調用子函數時,子函數必須先聲明,要不會報錯。(一般都將函數的聲明放在一下頭文件裡)

2.如若子函數為返回值是int時,可不用聲明,因為編譯器會為子函數默認一個聲明,返回值為int類型的,所以最開始的那個例子才不會報錯。

3.static修飾的函數作用域為從聲明/定義處到源文件結尾處為止。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved