關於C ,程式的prototype跟definition

請問function prototype跟function definition兩者的差別

3 Answers

Rating
  • Lv 7
    1 decade ago
    Favorite Answer

    function prototype是函式宣告, 你可以把它當作像. 在C/C++裡有一個很重要的規則. 就是在使用任何東西之前, 一定要先宣告那個東西. 但在用時並不需要先有其定義. 例, 在用變數之前一定要宣告那變數. 在呼叫函式之前一定要宣告那函式. function prototype就是函式宣告.一般的函式宣告是用以下格式:<形容字> <回傳型態> <函式名> (<引數/參數型態組>);<形容字>(不知有無翻錯)是像static和extern.<回傳型態>是像int, double,或char<函式名>是你的函式的名字<引數/參數組>是這個函式的引數/參數型態組. 如引數/參數型態的數量是兩個以上的, 那就要用,來做分隔. 要注意, 我說的是引數/參數型態組而不是引數/參數組. 引數/參數型態組和引數/參數組不一樣的地方在於引數/參數型態組只需標定其引數/參數的型態. 而引數/參數組則要標定其引數/參數的型態及其名字. 例://此函數的名字叫add, 有兩個int的引數/參數, 回傳一個intint add(int, int);//此函數的名字叫divide, 有兩個double的引數/參數, 回傳一個doubledouble divide(double, double);function definition是函式的定義. 也就是說你要用function definition告訴C/C++當此函式被呼叫時到底要做什麼. 也因此function definition裡的東西比function prototype多.一般的函式宣告是用以下格式:<形容字> <回傳型態> <函式名> (<引數/參數組>){    <函式的定義>}看出不同的地方了沒有? 不一樣的地方有兩個.一是在function definition裡是引數/參數組而不是引數/參數型態組. 引你要寫定義, 所以不只需要引數/參數的型態, 還要設定引數/參數的名字. (若在function definition裡的引數/參數只有型態而沒有名字的話就有別的意思, 有興趣請再問)二是函式的定義. 就是你的程式碼啦例://此函數的名字叫add, 有兩個int的引數/參數分別叫a和b,//會回傳一個a+b的值int add(int a, int b){    return(a+b);}//此函數的名字叫divide, 有兩個double的引數/參數分別叫a和b,//會回傳一個a/b的值double divide(double a, double b){    return(a/b);}在幫一個函式寫prototype和definition時要注意的兩點.1. 要注意prototype和definition裡的<形容字>, <回傳型態>, 和<函式名>要完全相同, 若不相同就會有compile錯誤. Definition裡的引數/參數組裡的型態一定要跟prototype裡的引數/參數型態組一樣. 若不相同也會有compile錯誤. 以以上的add()和divide()為例, 如果add()的prototype改成int add(int *, int);的話就會出錯, 因int add(int *, int);的第一個引數/參數的型態是個int的指標但在add()的definition裡第一個引數/參數的型態是個int.2. 如果在呼叫函式之前你就已把其函式定義寫好了的話你就不需要用prototype. 例://不需add()的prototype, 因add()的定義已在被呼叫前就寫好了#include <iostream>using namespace std;int add(int a, int b){    return(a+b);}int main(){    cout << add(1, 2);    system(“pause”);    return(0);}//需要add()的prototype, 因add()的定義是在被呼叫時之後#include <iostream>using namespace std;int add(int, int);int main(){    cout << add(1, 2);    system(“pause”);    return(0);}int add(int a, int b){    return(a+b);}總而言之. 如果function definition是部電影, 那function prototype是那部電影的預告.懂不懂?不懂請再問

    2005-11-01 00:57:26 補充:

    這是功課?

    Source(s): Myself
    • Login to reply the answers
  • 影歌
    Lv 4
    1 decade ago

    這是觀念 可以問吧

    • Login to reply the answers
  • 1 decade ago

    同學!功課要自己想阿 by 潘

    • Login to reply the answers
Still have questions? Get your answers by asking now.