最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言深入探究函數(shù)的溯源

 更新時(shí)間:2022年04月18日 08:58:00   作者:清風(fēng)自在 流水潺潺  
函數(shù)是一組一起執(zhí)行一個(gè)任務(wù)的語(yǔ)句。每個(gè) C 程序都至少有一個(gè)函數(shù),即主函數(shù) main() ,所有簡(jiǎn)單的程序都可以定義其他額外的函數(shù)

一、函數(shù)的由來(lái)

二、模塊化程序設(shè)計(jì)

三、C 語(yǔ)言中的模塊化

四、面向過(guò)程的程序設(shè)計(jì)

  • 面向過(guò)程是一種以過(guò)程為中心的編程思想
  • 首先將復(fù)雜的問(wèn)題分解為一個(gè)個(gè)容易解決的問(wèn)題
  • 分解過(guò)后的問(wèn)題可以按照步驟一步步完成
  • 函數(shù)是面向過(guò)程在 C 語(yǔ)言中的體現(xiàn)
  • 解決問(wèn)題的每個(gè)步驟可以用函數(shù)來(lái)實(shí)現(xiàn)

五、聲名和定義

  • 聲明的意義在于告訴編譯器程序單元的存在
  • 定義則明確指示程序單元的意義
  • C 語(yǔ)言中通過(guò) extern 進(jìn)行程序單元的聲明
  • 一些程序單元在聲明時(shí)可以省略 extern

        嚴(yán)格意義上的聲明和定義并不相同!

        下面看一個(gè)例子:

        test.c:

#include <stdio.h>
#include <malloc.h>
 
extern int g_var;    //聲明
extern struct Test;    //聲明
 
int main()
{
    extern void f(int i, int j);    //聲明
    extern int g(int x);    //聲明
    
    struct Test* p = NULL; // (struct Test*)malloc(sizeof(struct Test));
    
    printf("p = %p\n", p);
    
    //g_var = 10;
    
    printf("g_var = %d\n", g_var);
    
    f(1, 2);
    
    printf("g(3) = %d\n", g(3));
    
    free(p);
    
    return 0;
}

        global.c:

#include <stdio.h>
 
/*下面都是定義*/
int g_var = 10;
 
struct Test
{
    int x;
    int y;
};
 
void f(int i, int j)
{
    printf("i + j = %d\n", i + j);
}
 
int g(int x)
{
    return (int)(2 * x + g_var);
}

         輸出結(jié)果如下:

        怎么證明聲明和定義不同呢?我們對(duì) test.c 修改成這樣,將 struct Test* p = NULL;  改成 struct Test* p = (struct Test*)malloc(sizeof(struct Test));

#include <stdio.h>
#include <malloc.h>
 
extern int g_var;
 
extern struct Test;
 
int main()
{
    extern void f(int i, int j);
    extern int g(int x);
    
    struct Test* p = (struct Test*)malloc(sizeof(struct Test));
    
    printf("p = %p\n", p);
    
    //g_var = 10;
    
    printf("g_var = %d\n", g_var);
    
    f(1, 2);
    
    printf("g(3) = %d\n", g(3));
    
    free(p);
    
    return 0;
}

        可以看到,直接報(bào)錯(cuò):

delphi@delphi-vm:~$ gcc test.c global.c
test.c:6: warning: useless storage class specifier in empty declaration
test.c: In function ‘main’:
test.c:13: error: invalid application of ‘sizeof’ to incomplete type ‘struct Test’ 

        這是因?yàn)榫幾g器在 test.c 是找不到 struct Test 的定義的,只有  struct Test 的聲明,因此無(wú)法知道 struct Test 結(jié)構(gòu)體的信息。(C 語(yǔ)言編譯器編譯 C 文件的時(shí)候不會(huì)依賴于文件之間的編譯順序)。

六、小結(jié)

  • 函數(shù)是面向過(guò)程思想在 C 語(yǔ)言中的體現(xiàn)
  • 面向過(guò)程是由上至下分解問(wèn)題的設(shè)計(jì)方法
  • 程序中的定義和聲明完全不同
  • C 語(yǔ)言中通過(guò) extern 對(duì)程序單元進(jìn)行聲明

到此這篇關(guān)于C語(yǔ)言深入探究函數(shù)的溯源的文章就介紹到這了,更多相關(guān)C語(yǔ)言 函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

辉南县| 子洲县| 宣化县| 邛崃市| 鸡泽县| 周宁县| 河北省| 崇州市| 九寨沟县| 本溪| SHOW| 琼海市| 万载县| 三都| 沙田区| 翁牛特旗| 略阳县| 石河子市| 女性| 黄冈市| 美姑县| 江山市| 延寿县| 太湖县| 开封县| 湘潭市| 房产| 南城县| 南澳县| 平顶山市| 峨山| 龙里县| 晋宁县| 秀山| 关岭| 巴东县| 新野县| 集安市| 舞阳县| 扎囊县| 芜湖市|