亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

頭文件原理

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

常用頭文件作用表

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

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

stdio.h

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

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

    printf("請輸入第一個數(shù)字: ");  
    scanf("%lf", &num1); // 使用%lf讀取double類型  
  
    printf("請輸入運算符 (+, -, *, /): ");  
    scanf(" %c", &operator); // 前面的空格用于跳過任何之前的空白字符  
  
    printf("請輸入第二個數(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("錯誤:除數(shù)不能為0\n");  
                return 1; // 非零返回值表示程序異常退出  
            }  
            break;  
        default:  
            printf("錯誤:無效的運算符\n");  
            return 1;  
    }  
  
    printf("%.2lf %c %.2lf = %.2lf\n", num1, operator, num2, result);  
    return 0; 
}

stdlib.h

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

#include <stdio.h>  
#include <stdlib.h>  
  
int main() {  
    int n, *ptr, i;  
  
    printf("請輸入一個整數(shù)n: ");  
    scanf("%d", &n);  
  
    // 動態(tài)分配內(nèi)存以存儲n個整數(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頭文件拼接兩個字符

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

math頭文件

使用math.h頭文件計算圓的面積和周長

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

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

ctype

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

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

time.h

獲取當(dāng)前時間

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

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

    // 將time_t轉(zhuǎn)換為本地可讀的字符串格式
    char* c_time_string = ctime(&current_time);
    printf("當(dāng)前時間是: %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所以會觸發(fā)斷言失敗,

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

    return 0;
}

errno.h

錯誤處理

#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)用的錯誤號
        printf("打開文件失敗: %s\n", strerror(errno));
        exit(EXIT_FAILURE);
    }
    fclose(fp);
    return 0;
}

limits.h

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

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

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

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

float.h

查看浮點型限制

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

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

stdbool.h

布爾類型

#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類型,它是用于數(shù)組索引和循環(huán)計數(shù)的無符號整數(shù)類型
    size_t arraySize = 10;
    int array[arraySize];

    // 使用ptrdiff_t類型,它是兩個指針相減的結(jié)果的類型
    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(); // 這個調(diào)用會導(dǎo)致longjmp被觸發(fā)
    }

    return 0;
}

signal.h

信號處理,通過按下Ctrl+C來發(fā)送SIGINT信號觸發(fā)signalHandler函數(shù)

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

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

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

    return 0;
}

stdint.h

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

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

int main() {
    int8_t int8 = 127; // 8位有符號整數(shù)
    uint8_t uint8 = 255; // 8位無符號整數(shù)
    int16_t int16 = 32767; // 16位有符號整數(shù)
    uint32_t uint32 = 4294967295U; // 32位無符號整數(shù)
    int64_t int64 = 9223372036854775807LL; // 64位有符號整數(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ù)類型格式化

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

int main() {
    uint32_t number = 123456789U;

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

總結(jié)

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    C++ std:map的使用方法

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

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

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

最新評論