欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語(yǔ)言常用標(biāo)準(zhǔn)頭文件使用實(shí)例

 更新時(shí)間:2024年08月14日 08:33:03   作者:環(huán)能jvav大師  
在C的系列語(yǔ)言程序中,頭文件(通常擴(kuò)展名為.h)被大量使用,它通常包含函數(shù)、變量、結(jié)構(gòu)體等的聲明和定義,以及一些宏定義和類(lèi)型定義,這篇文章主要給大家介紹了關(guān)于C語(yǔ)言常用標(biāo)準(zhǔn)頭文件使用的相關(guān)資料,需要的朋友可以參考下

頭文件的基礎(chǔ)概念

在C的系列語(yǔ)言程序中,頭文件(通常擴(kuò)展名為.h)被大量使用,它通常包含函數(shù)、變量、結(jié)構(gòu)體等的聲明和定義,以及一些宏定義和類(lèi)型定義。頭文件的主要作用是為了方便管理和重用代碼,它可以被多個(gè)源文件共享,從而實(shí)現(xiàn)代碼的重用和模塊化。

頭文件原理

  • 代碼組織與模塊化:在一個(gè)應(yīng)用開(kāi)發(fā)體系中,功能的真正邏輯實(shí)現(xiàn)通常是以硬件層為基礎(chǔ),在驅(qū)動(dòng)程序、功能層程序以及用戶的應(yīng)用程序中完成的。頭文件作為用戶應(yīng)用程序和函數(shù)庫(kù)之間的橋梁和紐帶,有助于將程序的不同部分組織成模塊,每個(gè)模塊負(fù)責(zé)完成特定的功能。
  • 聲明與定義分離:頭文件主要保存程序的聲明,如函數(shù)原型、變量聲明、結(jié)構(gòu)體定義等,而定義文件(通常擴(kuò)展名為.c)則保存程序的實(shí)現(xiàn)。這種分離使得代碼結(jié)構(gòu)更清晰,同時(shí)也方便代碼的復(fù)用和修改。
  • 防止定義沖突:頭文件通過(guò)預(yù)處理指令(如ifndef/define/endif)來(lái)防止重復(fù)包含同一個(gè)頭文件,從而避免定義沖突。
  • 代碼復(fù)用:由于頭文件可以被多個(gè)源文件包含,因此它提供了一種方便的代碼復(fù)用機(jī)制。程序員可以將一些常用的函數(shù)聲明、變量聲明和宏定義放在頭文件中,然后在需要的地方包含這個(gè)頭文件,從而避免重復(fù)編寫(xiě)相同的代碼。
  • 類(lèi)型定義與內(nèi)聯(lián)函數(shù):頭文件可能包含自定義的數(shù)據(jù)類(lèi)型定義和內(nèi)聯(lián)函數(shù)的定義。這些類(lèi)型可以在整個(gè)程序中使用,而內(nèi)聯(lián)函數(shù)則可以在編譯時(shí)進(jìn)行展開(kāi),從而提高程序的執(zhí)行效率。
  • 編譯時(shí)鏈接:在編譯時(shí),編譯器會(huì)查找頭文件中聲明的函數(shù)和變量,并將其與實(shí)際定義進(jìn)行鏈接。這種鏈接過(guò)程確保了在硬件層面實(shí)現(xiàn)功能時(shí)能夠找到正確的代碼實(shí)現(xiàn)。

常用頭文件作用表

頭文件作用關(guān)鍵函數(shù)/宏/類(lèi)型
<stdio.h>標(biāo)準(zhǔn)輸入輸出庫(kù)printf()scanf()fgets()fputs()fopen()fclose()snprintf()vprintf() 等
<stdlib.h>常用函數(shù)庫(kù)malloc()free()exit()rand()srand()abs()div()lldiv() 等
<string.h>字符串處理庫(kù)strlen()strcpy()strcat()strcmp()strstr()memcpy()memset() 等
<math.h>數(shù)學(xué)函數(shù)庫(kù)sin()cos()tan()sqrt()pow()log()exp()ceil()floor() 等
<ctype.h>字符處理庫(kù)isalpha()isdigit()isupper()tolower()toupper() 等
<time.h>時(shí)間處理庫(kù)time()localtime()strftime()gmtime()difftime()mktime()clock() 等
<assert.h>斷言庫(kù)assert()
<errno.h>錯(cuò)誤號(hào)定義庫(kù)errno(全局變量)
<limits.h>數(shù)據(jù)類(lèi)型屬性庫(kù)INT_MAXINT_MINCHAR_MAXCHAR_MINSIZE_MAX 等
<float.h>浮點(diǎn)數(shù)屬性庫(kù)FLT_MAXDBL_MAXLDBL_MAXFLT_EPSILONDBL_EPSILON 等
<stdbool.h>布爾類(lèi)型庫(kù)booltruefalse
<stddef.h>標(biāo)準(zhǔn)定義庫(kù)size_tNULLoffsetof()ptrdiff_t 等
<setjmp.h>非局部跳轉(zhuǎn)庫(kù)setjmp()longjmp()
<signal.h>信號(hào)處理庫(kù)signal()raise()
<stdint.h>固定寬度整數(shù)類(lèi)型庫(kù)int8_tint16_tint32_tint64_tuint8_tuint16_tuint32_tuint64_t 等
<inttypes.h>整數(shù)類(lèi)型格式化庫(kù)PRId8PRIu8PRIX8PRId16PRIu16PRIX16, … 等宏用于printfscanf系列函數(shù)

常用標(biāo)準(zhǔn)頭文件使用實(shí)例

stdio.h

制作一個(gè)簡(jiǎn)易的的四則運(yùn)算小計(jì)算器,使用stdio.h頭文件中的printf()函數(shù)和scanf()函數(shù)

#include <stdio.h>  
  
int main() {  
    double num1, num2;  
    char operator;  
    double result;  

    printf("請(qǐng)輸入第一個(gè)數(shù)字: ");  
    scanf("%lf", &num1); // 使用%lf讀取double類(lèi)型  
  
    printf("請(qǐng)輸入運(yùn)算符 (+, -, *, /): ");  
    scanf(" %c", &operator); // 前面的空格用于跳過(guò)任何之前的空白字符  
  
    printf("請(qǐng)輸入第二個(gè)數(shù)字: ");  
    scanf("%lf", &num2);  
  
    switch (operator) {  
        case '+':  
            result = num1 + num2;  
            break;  
        case '-':  
            result = num1 - num2;  
            break;  
        case '*':  
            result = num1 * num2;  
            break;  
        case '/':  
            if (num2 != 0.0) {  
                result = num1 / num2;  
            } else {  
                printf("錯(cuò)誤:除數(shù)不能為0\n");  
                return 1; // 非零返回值表示程序異常退出  
            }  
            break;  
        default:  
            printf("錯(cuò)誤:無(wú)效的運(yùn)算符\n");  
            return 1;  
    }  
  
    printf("%.2lf %c %.2lf = %.2lf\n", num1, operator, num2, result);  
    return 0; 
}

stdlib.h

使用stdlib.h頭文件,根據(jù)用戶輸入的整數(shù)來(lái)分配動(dòng)態(tài)內(nèi)存分配。

#include <stdio.h>  
#include <stdlib.h>  
  
int main() {  
    int n, *ptr, i;  
  
    printf("請(qǐng)輸入一個(gè)整數(shù)n: ");  
    scanf("%d", &n);  
  
    // 動(dòng)態(tài)分配內(nèi)存以存儲(chǔ)n個(gè)整數(shù)  
    ptr = (int*)malloc(n * sizeof(int));  
  
    if (ptr == NULL) {  
        printf("內(nèi)存分配失敗!\n");  
        exit(EXIT_FAILURE); // 退出程序  
    }  
  
    // 初始化數(shù)組  
    for (i = 0; i < n; ++i) {  
        ptr[i] = i + 1;  
    }  
  
    printf("數(shù)組元素為: ");  
    for (i = 0; i < n; ++i) {  
        printf("%d ", ptr[i]);  
    }  
    printf("\n");  
    // 釋放分配的內(nèi)存  
    free(ptr);  
    return 0;  
}

string.h

使用string.h頭文件拼接兩個(gè)字符

#include <stdio.h>  
#include <string.h>  
  
int main() {  
    char str1[50], str2[50];  
  
    printf("請(qǐng)輸入第一個(gè)字符串: ");  
    fgets(str1, sizeof(str1), stdin); // 讀取字符串,包括換行符  
    str1[strcspn(str1, "\n")] = 0; // 移除字符串末尾的換行符  
  
    printf("請(qǐng)輸入第二個(gè)字符串: ");  
    fgets(str2, sizeof(str2), stdin);  
    str2[strcspn(str2, "\n")] = 0;  
  
    // 連接兩個(gè)字符串  
    strcat(str1, str2);  
    printf("連接后的字符串為: %s\n", str1);  
    return 0;  
}

math頭文件

使用math.h頭文件計(jì)算圓的面積和周長(zhǎng)

#include <stdio.h>  
#include <math.h>  

#define M_PI 3.14159265358979323846 
 
int main() {  
    double radius, area, circumference;  
  
    printf("請(qǐng)輸入圓的半徑: ");  
    scanf("%lf", &radius);  
    // 計(jì)算圓的面積  
    area = M_PI * radius * radius; // 使用預(yù)定義的M_PI常量  
    // 計(jì)算圓的周長(zhǎng)  
    circumference = 2 * M_PI * radius;  
  
    printf("圓的面積為: %.2lf\n", area);  
    printf("圓的周長(zhǎng)為: %.2lf\n", circumference);  
  
    return 0;  
}

ctype

使用ctype.h進(jìn)行字符處理,轉(zhuǎn)換輸入字符的大小寫(xiě)

#include <stdio.h>  
#include <ctype.h>  
  
int main() {  
    char ch;  
  
    printf("請(qǐng)輸入一個(gè)字符: ");  
    scanf(" %c", &ch); 
  
    // 判斷字符類(lèi)型  
    if (isalpha(ch)) {  
        printf("這是一個(gè)字母字符\n");  
    } else if (isdigit(ch)) {  
        printf("這是一個(gè)數(shù)字字符\n");  
    } else if (isspace(ch)) {  
        printf("這是一個(gè)空白字符\n");  
    } else {  
        printf("這是一個(gè)特殊字符\n");  
    }  
  
    // 轉(zhuǎn)換字符大小寫(xiě)
    if (isalpha(ch)) {  
        ch = isupper(ch) ? tolower(ch) : toupper(ch);  
        printf("轉(zhuǎn)換后的字符為: %c\n", ch);  
    }  
  
    return 0;  
}

time.h

獲取當(dāng)前時(shí)間

#include <stdio.h>
#include <time.h>

int main() {
    // 獲取當(dāng)前時(shí)間
    time_t current_time;
    current_time = time(NULL);

    // 將time_t轉(zhuǎn)換為本地可讀的字符串格式
    char* c_time_string = ctime(&current_time);
    printf("當(dāng)前時(shí)間是: %s", c_time_string);

    return 0;
}

assert.h

程序調(diào)試斷言

#include <stdio.h>
#include <assert.h>

int main() {
    int x = 5;
    int y = 0;

    // 使用assert進(jìn)行調(diào)試斷言
    assert(y != 0); // y為0所以會(huì)觸發(fā)斷言失敗,

    // 如果斷言成功,程序繼續(xù)執(zhí)行,如果斷言失敗,程序會(huì)打印一條錯(cuò)誤消息并終止執(zhí)行
    int z = x / y;
    printf("z的值為: %d\n", z); // 這行不會(huì)被執(zhí)行

    return 0;
}

errno.h

錯(cuò)誤處理

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>

int main() {
    FILE *fp = fopen("test.txt", "r");

    if (fp == NULL) {
        // 使用errno獲取并打印最后發(fā)生的系統(tǒng)調(diào)用的錯(cuò)誤號(hào)
        printf("打開(kāi)文件失敗: %s\n", strerror(errno));
        exit(EXIT_FAILURE);
    }
    fclose(fp);
    return 0;
}

limits.h

查看數(shù)據(jù)類(lèi)型限制

#include <stdio.h>
#include <limits.h>

int main() {
    // 打印整型變量的范圍
    printf("int的最大值為: %d\n", INT_MAX);
    printf("int的最小值為: %d\n", INT_MIN);

    // 打印無(wú)符號(hào)整型變量的范圍
    printf("unsigned int的最大值為: %u\n", UINT_MAX);
    return 0;
}

float.h

查看浮點(diǎn)型限制

#include <stdio.h>
#include <float.h>

int main() {
    // 打印float類(lèi)型的最大和最小值
    printf("float的最大正有限值為: %e\n", FLT_MAX);
    printf("float的最小正有限值為: %e\n", FLT_MIN);
    // 打印double類(lèi)型的最大和最小值
    printf("double的最大正有限值為: %e\n", DBL_MAX);
    printf("double的最小正有限值為: %e\n", DBL_MIN);
    // 打印float類(lèi)型的精度
    printf("float的精度(epsilon): %e\n", FLT_EPSILON);
    return 0;
}

stdbool.h

布爾類(lèi)型

#include <stdio.h>
#include <stdbool.h>

int main() {
    bool flag = true;

    if (flag) {
        printf("標(biāo)志是 true\n");
    } else {
        printf("標(biāo)志是 false\n");
    }

    flag = false;
    if (!flag) {
        printf("現(xiàn)在標(biāo)志是 false\n");
    }

    return 0;
}

stddef.h

標(biāo)準(zhǔn)定義

#include <stdio.h>
#include <stddef.h>

int main() {
    // 使用size_t類(lèi)型,它是用于數(shù)組索引和循環(huán)計(jì)數(shù)的無(wú)符號(hào)整數(shù)類(lèi)型
    size_t arraySize = 10;
    int array[arraySize];

    // 使用ptrdiff_t類(lèi)型,它是兩個(gè)指針相減的結(jié)果的類(lèi)型
    int *ptr1 = array;
    int *ptr2 = &array[5];
    ptrdiff_t diff = ptr2 - ptr1;
    printf("ptr2和ptr1之間的差是: %td\n", diff);

    // 使用NULL宏作為指針的空值
    int *nullPtr = NULL;
    if (nullPtr == NULL) {
        printf("nullPtr 是 NULL\n");
    }

    return 0;
}

setjmp.h

非局部跳轉(zhuǎn)

#include <stdio.h>
#include <setjmp.h>

jmp_buf env;

void function() {
    longjmp(env, 1); // 非局部跳轉(zhuǎn)回setjmp的位置
}

int main() {
    if (setjmp(env) != 0) { // 如果longjmp被調(diào)用,setjmp返回非零值
        printf("Longjmp was called!\n");
    } else {
        printf("About to call function...\n");
        function(); // 這個(gè)調(diào)用會(huì)導(dǎo)致longjmp被觸發(fā)
    }

    return 0;
}

signal.h

信號(hào)處理,通過(guò)按下Ctrl+C來(lái)發(fā)送SIGINT信號(hào)觸發(fā)signalHandler函數(shù)

#include <stdio.h>
#include <signal.h>
#include <unistd.h>

void signalHandler(int signum) {
    printf("接收到信號(hào) %d\n", signum);
    exit(signum);
}

int main() {
    // 注冊(cè)信號(hào)SIGINT和處理函數(shù)
    signal(SIGINT, signalHandler);
    while(1) {
        printf("運(yùn)行中...\n");
        sleep(1);
    }

    return 0;
}

stdint.h

固定寬度整數(shù)類(lèi)型

#include <stdio.h>
#include <stdint.h>

int main() {
    int8_t int8 = 127; // 8位有符號(hào)整數(shù)
    uint8_t uint8 = 255; // 8位無(wú)符號(hào)整數(shù)
    int16_t int16 = 32767; // 16位有符號(hào)整數(shù)
    uint32_t uint32 = 4294967295U; // 32位無(wú)符號(hào)整數(shù)
    int64_t int64 = 9223372036854775807LL; // 64位有符號(hào)整數(shù)

    printf("int8: %d\n", int8);
    printf("uint8: %u\n", uint8);
    printf("int16: %d\n", int16);
    printf("uint32: %u\n", uint32);
    printf("int64: %lld\n", int64);

    return 0;
}

inttypes.h

整數(shù)類(lèi)型格式化

#include <stdio.h>
#include <inttypes.h>

int main() {
    uint32_t number = 123456789U;

    // 使用inttypes.h中定義的宏來(lái)格式化輸出
    printf("使用PRIu32: %" PRIu32 "\n", number);
    return 0;
}

總結(jié)

到此這篇關(guān)于C語(yǔ)言常用標(biāo)準(zhǔn)頭文件使用的文章就介紹到這了,更多相關(guān)C語(yǔ)言常用標(biāo)準(zhǔn)頭文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++實(shí)現(xiàn)封裝的順序表的操作與實(shí)踐

    C++實(shí)現(xiàn)封裝的順序表的操作與實(shí)踐

    在程序設(shè)計(jì)中,順序表是一種常見(jiàn)的線性數(shù)據(jù)結(jié)構(gòu),通常用于存儲(chǔ)具有固定順序的元素,與鏈表不同,順序表中的元素是連續(xù)存儲(chǔ)的,因此訪問(wèn)速度較快,但插入和刪除操作的效率可能較低,本文將詳細(xì)介紹如何用 C++ 語(yǔ)言實(shí)現(xiàn)一個(gè)封裝的順序表類(lèi),深入探討順序表的核心操作
    2025-02-02
  • C++中字符串以及數(shù)組和指針的互相使用講解

    C++中字符串以及數(shù)組和指針的互相使用講解

    這篇文章主要介紹了C++中字符串以及數(shù)組和指針的互相使用講解,是C++入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • C++拷貝構(gòu)造函數(shù)(深拷貝與淺拷貝)詳解

    C++拷貝構(gòu)造函數(shù)(深拷貝與淺拷貝)詳解

    深拷貝和淺拷貝可以簡(jiǎn)單理解為:如果一個(gè)類(lèi)擁有資源,當(dāng)這個(gè)類(lèi)的對(duì)象發(fā)生復(fù)制過(guò)程的時(shí)候,資源重新分配,這個(gè)過(guò)程就是深拷貝,反之,沒(méi)有重新分配資源,就是淺拷貝
    2013-09-09
  • C++中實(shí)現(xiàn)fibonacci數(shù)列的幾種方法

    C++中實(shí)現(xiàn)fibonacci數(shù)列的幾種方法

    本文主要介紹了C++中實(shí)現(xiàn)fibonacci數(shù)列的幾種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++虛函數(shù)表實(shí)例分析

    C++虛函數(shù)表實(shí)例分析

    這篇文章主要介紹了C++虛函數(shù)表,對(duì)多態(tài)中用到的虛函數(shù)表進(jìn)行了比較通俗的實(shí)例分析,需要的朋友可以參考下
    2014-09-09
  • Qt多版本共存使用實(shí)現(xiàn)組件增刪

    Qt多版本共存使用實(shí)現(xiàn)組件增刪

    本文主要介紹了Qt多版本共存使用實(shí)現(xiàn)組件增刪,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Qt實(shí)現(xiàn)簡(jiǎn)單五子棋小游戲

    Qt實(shí)現(xiàn)簡(jiǎn)單五子棋小游戲

    這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)簡(jiǎn)單五子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • C++實(shí)現(xiàn)圖書(shū)管理系統(tǒng)課程設(shè)計(jì)

    C++實(shí)現(xiàn)圖書(shū)管理系統(tǒng)課程設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)圖書(shū)管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++ std:map的使用方法

    C++ std:map的使用方法

    std::map是C++標(biāo)準(zhǔn)庫(kù)中一個(gè)強(qiáng)大而高效的關(guān)聯(lián)容器,本文就來(lái)介紹一下C++ std:map的使用方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-02-02
  • C++ 算法精講之貪心算法

    C++ 算法精講之貪心算法

    貪心算法(又稱(chēng)貪婪算法)是指,在對(duì)問(wèn)題求解時(shí),總是做出在當(dāng)前看來(lái)是最好的選擇。也就是說(shuō),不從整體最優(yōu)上加以考慮,他所做出的僅是在某種意義上的局部最優(yōu)解
    2022-03-03

最新評(píng)論