头文件包含【预处理】(58)
- 包含的意義
- 包含的方式
- 方式<>
- 方式" "
- 多文件編程
- 多文件編程意義
- 多文件編程的前提
- 多文件包含實例
- 定義頭文件
- 誰用誰包含
- 自包含
- 避免頭文件重復包含
包含的意義
包含的意義是全寫入被包含的文件中。
創建一個aa.c文件:
aa.c文件內容:
stu@stu-virtual-machine:~$ vi aa.c stu@stu-virtual-machine:~$ cat aa.c #include "bb.c" aaaaa bbbb ccc dd e創建一個bb.c文件并且輸入內容:
stu@stu-virtual-machine:~$ vi bb.c stu@stu-virtual-machine:~$ cat bb.c a bb ccc dddd eeeee ffffff對于aa.c文件進行預處理:
stu@stu-virtual-machine:~$ gcc -E aa.c -o aa.i查看aa.i文件:
stu@stu-virtual-machine:~$ gcc -E aa.c -o aa.i stu@stu-virtual-machine:~$ cat aa.i # 1 "aa.c" # 1 "<built-in>" # 1 "<command-line>" # 31 "<command-line>" # 1 "/usr/include/stdc-predef.h" 1 3 4 # 32 "<command-line>" 2 # 1 "aa.c" # 1 "bb.c" 1 a bb ccc dddd eeeee ffffff # 2 "aa.c" 2 aaaaa bbbb ccc dd e我們可以看到在代碼中體現出來的包含的意義是全寫入被包含的文件中。
注意:預處理階段不會做錯誤判斷,只是進行替換。
所以我們在C語言代碼中經常用到的#include<stdio.h>就是找到stdio.h這個文件,用這個文件的所有內容替換#include<stdio.h>代碼。
包含的方式
方式<>
我們目前的理解就是方式<>是包含系統的頭文件。
#include<stdio.h>,從系統指定路徑中搜索包含頭文件。
linux 中的系統路徑為(/usr/include)。
方式" "
我們目前的理解就是方式" "是包含我們自己編寫的頭文件。
#include"myString.h",從工程當前路徑中搜索包含頭文件,如果當前工程路徑下沒有的話,則到系統路徑下搜索包含頭文件。
多文件編程
多文件編程意義
多文件編程可以至少有兩大好處:
一是,方便管理,協同開發。
二是,便于分享與加密(作成函數庫)。
我們一般在實際開發中給用戶提供的是頭文件和庫文件,而不會提供源代碼。
多文件編程的前提
c 語言是以文件為單位進行編譯的,編譯期只需要函數聲明即可。鏈接階段提供實現就可以完成生成可執行文件。
多文件包含實例
多文件實現帶頭節點的單鏈表
定義頭文件
多文件編碼的規則:
誰用誰包含。
自包含。
避免頭文件重復包含。
誰用誰包含
誰用誰包含很容易理解,包含需要使用的文件。
自包含
.c 文件中存在相互調用的關系,自包含可以免去了多余的前向聲明。
main.c
str.h
#ifndef __STR_H__ //避免頭文件重復包含 #define __STR_H__ int myStrlen(char *p); void mySortStr(char *p); #endif // STR_Hstr.c
#include "str.h"void mySortStr(char *p) {int i,j;intn = myStrlen(p);for(i=0; i<n-1; i++){for(j=i+1;j<n; j++){if(p[i]>p[j]){p[i] = p[i]^p[j];p[j] = p[i]^p[j];p[i] = p[i]^p[j];}}} }int myStrlen(char *p) {int n=0;while(*p++!='\0')n++;return n; }避免頭文件重復包含
假設文件名叫 xx.h
#ifndef __XX_H__ //避免頭文件重復包含 #define __XX_H__ //數據類型聲明 //函數聲明 #endif案例:
stu.h
#ifndef __STU_H__ #define __STU_H__ struct Stu {char name[30];float score; }; void display(struct Stu s); #endif // __STU_H__sort.h
#ifndef __SORT_H__ #define __SORT_H__ #include "stu.h" void sort(struct Stu *s); #endif // __SORT_H__main.c
#include <stdio.h> #include "stu.h" #include "sort.h" int main(void) {struct Stu s[5];display(s[0]);sort(s);return 0; }我們在編碼過程中一定要避免頭文件重復包含,也要避免文件之間相互包含。
總結
以上是生活随笔為你收集整理的头文件包含【预处理】(58)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 栈的动态顺序存储和实现(C语言)【栈】(
- 下一篇: 位操作的应用:无参数交换数据,异或加密,