當前位置:首頁 » 編程語言 » c語言調用a文件
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言調用a文件

發布時間: 2022-04-29 01:43:42

c語言中,是否可以調用其它文件的函數

可以調用。

一、從一個源文件里調用另一個源文件的函數。在源文件A1.c中調用A2.c 中的函數有兩種方法:

1、在A2.c中有完整的函數定義,在A1.c中添加一下要用到的函數原型(聲明)就可以了,例如:

在A2.c中:有函數void A2(){...};。

在A1.c中:在文件前頭增加一行:void A2();就可以了。

2、把A2.c中完整定義的函數的原型,寫到一個A2.h文件中,然後在A1.c的文件頭增加#include "A2.h"就可以了。

以上兩種方法,在A1.c中都可以正常的調用,就跟在A2.c中調用一樣。

其實函數默認是外部的,只要在其他文件中聲明就能使用;但是注意如果在前面加上static,就只能在本文件中使用了,不能再被其他的文件調用。

二、編寫頭文件:

1、一個.h文件要 對應有一個.c文件,這樣鏈接器就可以調用這個文件里的函數。比如a.h 和 a.c。

在.h文件中:

#ifndef __A_H_

#define __A_H_

#include<stdio.h>

void trans2(double B) ;

double trans1() ;

#endif

2、把相應的函數定義寫在.c文件中。這里要強調一點:要加上#include ".h",這個一般作為一種工程規范。因為如果.c文件中的函數也需要調用同個.c中的其它函數,那麼這個.

c往往會include對應的.h,這樣就不需要為聲明和調用順序而發愁了。比如頭文件里進行了變數的聲明,這個時候對應的.c文件是一定要加上這個頭文件的。

3、再在其他的main.c文件開頭添加#include "a.h"。

(1)c語言調用a文件擴展閱讀:

include用法:

#include命令預處理命令的一種,預處理命令可以將別的源代碼內容插入到所指定的位置;可以標識出只有在特定條件下才會被編譯的某一段程序代碼;可以定義類似標識符功能的宏,在編譯時,預處理器會用別的文本取代該宏。

插入頭文件的內容

#include命令告訴預處理器將指定頭文件的內容插入到預處理器命令的相應位置。有兩種方式可以指定插入頭文件:

1、#include<文件名>

2、#include"文件名"

如果需要包含標准庫頭文件或者實現版本所提供的頭文件,應該使用第一種格式。如下例所示:

#include<math.h>//一些數學函數的原型,以及相關的類型和宏

如果需要包含針對程序所開發的源文件,則應該使用第二種格式。

採用#include命令所插入的文件,通常文件擴展名是.h,文件包括函數原型、宏定義和類型定義。只要使用#include命令,這些定義就可被任何源文件使用。

② C語言有關的.a文件是什麼文件是C的庫文件嗎生成的.a文件如何打開看函數

解決方法很多!.a是靜態鏈接庫文件,一般會和一個頭文件配合提供給用戶使用
想看函數的話必須通過其配套的頭文件看,想看函數實現的話除非反編譯,否則沒法直接看到的

③ c語言程序調用外部文件

可以調用。

一、從一個源文件里調用另一個源文件的函數。在源文件A1.c中調用A2.c 中的函數有兩種方法:

1、在A2.c中有完整的函數定義,在A1.c中添加一下要用到的函數原型(聲明)就可以了,例如:

在A2.c中:有函數void A2(){...};。

在A1.c中:在文件前頭增加一行:void A2();就可以了。

2、把A2.c中完整定義的函數的原型,寫到一個A2.h文件中,然後在A1.c的文件頭增加#include "A2.h"就可以了。

以上兩種方法,在A1.c中都可以正常的調用,就跟在A2.c中調用一樣。

其實函數默認是外部的,只要在其他文件中聲明就能使用;但是注意如果在前面加上static,就只能在本文件中使用了,不能再被其他的文件調用。

二、編寫頭文件:

1、一個.h文件要 對應有一個.c文件,這樣鏈接器就可以調用這個文件里的函數。比如a.h 和 a.c。

在.h文件中:

#ifndef __A_H_

#define __A_H_

#include<stdio.h>

void trans2(double B) ;

double trans1() ;

#endif

2、把相應的函數定義寫在.c文件中。這里要強調一點:要加上#include ".h",這個一般作為一種工程規范。因為如果.c文件中的函數也需要調用同個.c中的其它函數,那麼這個.

c往往會include對應的.h,這樣就不需要為聲明和調用順序而發愁了。比如頭文件里進行了變數的聲明,這個時候對應的.c文件是一定要加上這個頭文件的。

3、再在其他的main.c文件開頭添加#include "a.h"。

(3)c語言調用a文件擴展閱讀:

include用法:

#include命令預處理命令的一種,預處理命令可以將別的源代碼內容插入到所指定的位置;可以標識出只有在特定條件下才會被編譯的某一段程序代碼;可以定義類似標識符功能的宏,在編譯時,預處理器會用別的文本取代該宏。

插入頭文件的內容

#include命令告訴預處理器將指定頭文件的內容插入到預處理器命令的相應位置。有兩種方式可以指定插入頭文件:

1、#include<文件名>

2、#include"文件名"

如果需要包含標准庫頭文件或者實現版本所提供的頭文件,應該使用第一種格式。如下例所示:

#include<math.h>//一些數學函數的原型,以及相關的類型和宏

如果需要包含針對程序所開發的源文件,則應該使用第二種格式。

採用#include命令所插入的文件,通常文件擴展名是.h,文件包括函數原型、宏定義和類型定義。只要使用#include命令,這些定義就可被任何源文件使用。

④ (C語言問題)如何使用別人提供的.a介面文件

for example:(1)動態庫的編譯
這里有一個頭文件:so_test.h,三個.c文件:test_a.c、test_b.c、test_c.c,我們將這幾個文件編譯成一個動態庫:libtest.so。
命令:$ gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so
(參考2:都是由C或C++編譯出來的)
(-shared 該選項指定生成動態連接庫(讓連接器生成T類型的導出符號表,有時候也生成弱連接W類型的導出符號),不用該標志外部程序無法連接。相當於一個可執行文件)
(-fPIC:表示編譯為位置獨立的代碼,不用此選項的話編譯後的代碼是位置相關的所以動態載入時是通過代碼拷貝的方式來滿足不同進程的需要,而不能達到真正代碼段共享的目的。)
(2)動態庫的鏈接
這里有個程序源文件 test.c 與動態庫 libtest.so 鏈接生成執行文件 test:
命令:$ gcc test.c -L. -ltest -o test
(註:測試是否動態連接,如果列出libtest.so,那麼應該是連接正常了)
(-L.:表示要連接的庫在當前目錄中)
(-ltest:編譯器查找動態連接庫時有隱含的命名規則,即在給出的名字前面加上lib,後面加上.so來確定庫的名稱)
命令:$ ldd test
(註:執行test,可以看到它是如何調用動態庫中的函數的。)

⑤ c語言中文件間的調用怎麼實現

函數文件是這樣的:int
sum(int
a,int
b){int
c;c=a+b;return
c;}換行你該知道哈,我這里不方便,就沒換行。

⑥ c語言中文件使用方式中a和a+是一個意思嗎,麻煩大家解釋下 謝謝

a是以追加的方式打開一個文本文件,只能從文件尾向文件追加數據
a+是以讀/寫的方式從文件中讀取或往文件中寫入數據。

⑦ c語言中文件怎樣調用文件

擴展名為.h的文件,在C語言中被稱為header file, 也就是頭文件。
頭文件的數據格式就是普通的文本文件,可以通過新建文本文件(txt),再把擴展名改為.h的方式創建,在此不贅述。

一、頭文件內容格式。
頭文件內容並沒有固定的格式要求,不過一般為防止嵌套引用給編譯器帶來死鎖或者沒必要的開銷,一般約定整個頭文件中所有內容在一個條件編譯下,即如下格式:
#ifndef 宏名
#define 宏名
//頭文件主體
#endif
這樣可以保證一個頭文件在一個源文件中最多隻被引用一次。為避免宏名重復,宏名一般由頭文件名轉換而來,如果頭文件名是xxx.h,那麼宏名一般定義為:
_XXX_H_
即前後各加一個下劃線,同時文件名中除數字、字母、下劃線以外的字元均轉換為下劃線(_)。

頭文件主體中內容同樣沒有做強制約定,可以出現在源文件(.c)中的任何代碼均可以放在頭文件中。不過一般情況下可以包括以下幾種內容:
1 引用其它頭文件,格式為
#include <xxx.h>

#include "xxx.h"
二者區別在介紹頭文件引用時再詳細介紹。
2 定義私有類型。比如
typedef unsigned long U32; //為了簡寫而給無符號32位整型定義一個新的名字
struct xxx {};
也可以是enum, union等復雜類型。
3 宏定義。比如
#define MAX(a,b) (a>b?a:b)
4 函數聲明。比如
void test_function(void);
5 全局變數聲明。比如
extern int global_var;
6 如果有一個靜態全局變數需要在不同源文件中使用,但各文件之間互不相關。那麼可以放在頭文件中。如:
static int gs_var = 3;

7 對於支持C99規范的C編譯器,還可以把內聯函數定義在頭文件中。比如
static inline int get_min(int a, int b)
{
if(a>b) return b;
return a;
}
以上是常見的頭文件中的元素。但實際上頭文件中也可以放全局變數的定義,全局函數的實現等。但是頭文件中一旦定義了這樣的元素,這個頭文件在一個工程中只能被一個文件引用,否則編譯器會報重復定義的錯誤。
比如如果有一個規模很大的常量數組,比如一副圖片的二進制值,如果把它定義在源文件中,就會顯得很冗餘,因為並不會經常修改。 這時可以定義在頭文件中,只在一個源文件中引用,當有多幅圖片需要隨時更換時,也可以通過簡單的在源文件中修改引用的頭文件名達到修改的目的。

二、頭文件的引用。
頭文件引用的方法其實之前已經大致說過了,在源文件中引用頭文件和在頭文件中引用的格式是一樣的:

#include<xxx.h>或者
#include "xxx.h"
xxx為頭文件名。
用<>和""是有一定的區別的。在編譯器查找頭文件的時候,會在兩個區域分別查找。
一個是系統頭文件區域,即類似於stdio.h一類的C庫函數頭文件區。
另一個是自定義頭文件區,比如當前目錄,以及其它自定義的目錄。
用<>時,編譯器會先在系統區域查找,然後再查找自定義區域。而用""時則相反。
由於一般並不推薦自定義頭文件名與系統頭文件名相同(容易引起歧義並難以維護),所以先後順序並不是太重要,尤其在硬體速度越來越快的今天,使用哪種符號引用頭文件已經差別很小了。

⑧ C語言中調用文件問題

所謂「文件」是指一組相關數據的有序集合。 這個數據集有一個名稱,叫做文件名。 實際上在前面的各章中我們已經多次使用了文件,例如源程序文件、目標文件、可執行文件、庫文件 (頭文件)等。文件通常是駐留在外部介質(如磁碟等)上的, 在使用時才調入內存中來。從不同的角度可對文件作不同的分類。從用戶的角度看,文件可分為普通文件和設備文件兩種。

普通文件是指駐留在磁碟或其它外部介質上的一個有序數據集,可以是源文件、目標文件、可執行程序; 也可以是一組待輸入處理的原始數據,或者是一組輸出的結果。對於源文件、目標文件、 可執行程序可以稱作程序文件,對輸入輸出數據可稱作數據文件。

設備文件是指與主機相聯的各種外部設備,如顯示器、列印機、鍵盤等。在操作系統中,把外部設備也看作是一個文件來進行管理,把它們的輸入、輸出等同於對磁碟文件的讀和寫。 通常把顯示器定義為標准輸出文件, 一般情況下在屏幕上顯示有關信息就是向標准輸出文件輸出。如前面經常使用的printf,putchar 函數就是這類輸出。鍵盤通常被指定標準的輸入文件, 從鍵盤上輸入就意味著從標准輸入文件上輸入數據。scanf,getchar函數就屬於這類輸入。

從文件編碼的方式來看,文件可分為ASCII碼文件和二進制碼文件兩種。

ASCII文件也稱為文本文件,這種文件在磁碟中存放時每個字元對應一個位元組,用於存放對應的ASCII碼。例如,數5678的存儲形式為:
ASC碼: 00110101 00110110 00110111 00111000
↓ ↓ ↓ ↓
十進制碼: 5 6 7 8 共佔用4個位元組。ASCII碼文件可在屏幕上按字元顯示, 例如源程序文件就是ASCII文件,用DOS命令TYPE可顯示文件的內容。 由於是按字元顯示,因此能讀懂文件內容。

二進制文件是按二進制的編碼方式來存放文件的。 例如, 數5678的存儲形式為: 00010110 00101110隻佔二個位元組。二進制文件雖然也可在屏幕上顯示, 但其內容無法讀懂。C系統在處理這些文件時,並不區分類型,都看成是字元流,按位元組進行處理。 輸入輸出字元流的開始和結束只由程序控制而不受物理符號(如回車符)的控制。 因此也把這種文件稱作「流式文件」。

本章討論流式文件的打開、關閉、讀、寫、 定位等各種操作。文件指針在C語言中用一個指針變數指向一個文件, 這個指針稱為文件指針。通過文件指針就可對它所指的文件進行各種操作。 定義說明文件指針的一般形式為: FILE* 指針變數標識符; 其中FILE應為大寫,它實際上是由系統定義的一個結構, 該結構中含有文件名、文件狀態和文件當前位置等信息。 在編寫源程序時不必關心FILE結構的細節。例如:FILE *fp; 表示fp是指向FILE結構的指針變數,通過fp 即可找存放某個文件信息的結構變數,然後按結構變數提供的信息找到該文件, 實施對文件的操作。習慣上也籠統地把fp稱為指向一個文件的指針。文件的打開與關閉文件在進行讀寫操作之前要先打開,使用完畢要關閉。 所謂打開文件,實際上是建立文件的各種有關信息, 並使文件指針指向該文件,以便進行其它操作。關閉文件則斷開指針與文件之間的聯系,也就禁止再對該文件進行操作。

在C語言中,文件操作都是由庫函數來完成的。 在本章內將介紹主要的文件操作函數。

文件打開函數fopen

fopen函數用來打開一個文件,其調用的一般形式為: 文件指針名=fopen(文件名,使用文件方式) 其中,「文件指針名」必須是被說明為FILE 類型的指針變數,「文件名」是被打開文件的文件名。 「使用文件方式」是指文件的類型和操作要求。「文件名」是字元串常量或字元串數組。例如:

FILE *fp;
fp=("file a","r");

其意義是在當前目錄下打開文件file a, 只允許進行「讀」操作,並使fp指向該文件。

又如:

FILE *fphzk
fphzk=("c:\\hzk16',"rb")

其意義是打開C驅動器磁碟的根目錄下的文件hzk16, 這是一個二進制文件,只允許按二進制方式進行讀操作。兩個反斜線「\\ 」中的第一個表示轉義字元,第二個表示根目錄。使用文件的方式共有12種,下面給出了它們的符號和意義。

文件使用方式 意 義
「rt」 只讀打開一個文本文件,只允許讀數據
「wt」 只寫打開或建立一個文本文件,只允許寫數據
「at」 追加打開一個文本文件,並在文件末尾寫數據
「rb」 只讀打開一個二進制文件,只允許讀數據
「wb」 只寫打開或建立一個二進制文件,只允許寫數據
「ab」 追加打開一個二進制文件,並在文件末尾寫數據
「rt+」 讀寫打開一個文本文件,允許讀和寫
「wt+」 讀寫打開或建立一個文本文件,允許讀寫
「at+」 讀寫打開一個文本文件,允許讀,或在文件末追加數 據
「rb+」 讀寫打開一個二進制文件,允許讀和寫
「wb+」 讀寫打開或建立一個二進制文件,允許讀和寫
「ab+」 讀寫打開一個二進制文件,允許讀,或在文件末追加數據

對於文件使用方式有以下幾點說明:

1. 文件使用方式由r,w,a,t,b,+六個字元拼成,各字元的含義是:

r(read): 讀
w(write): 寫
a(append): 追加
t(text): 文本文件,可省略不寫
b(banary): 二進制文件
+: 讀和寫

2. 凡用「r」打開一個文件時,該文件必須已經存在, 且只能從該文件讀出。

3. 用「w」打開的文件只能向該文件寫入。 若打開的文件不存在,則以指定的文件名建立該文件,若打開的文件已經存在,則將該文件刪去,重建一個新文件。

4. 若要向一個已存在的文件追加新的信息,只能用「a 」方式打開文件。但此時該文件必須是存在的,否則將會出錯。

5. 在打開一個文件時,如果出錯,fopen將返回一個空指針值NULL。在程序中可以用這一信息來判別是否完成打開文件的工作,並作相應的處理。因此常用以下程序段打開文件:

if((fp=fopen("c:\\hzk16","rb")==NULL)
{
printf("\nerror on open c:\\hzk16 file!");
getch();
exit(1);
}

這段程序的意義是,如果返回的指針為空,表示不能打開C盤根目錄下的hzk16文件,則給出提示信息「error on open c:\ hzk16file!」,下一行getch()的功能是從鍵盤輸入一個字元,但不在屏幕上顯示。在這里,該行的作用是等待, 只有當用戶從鍵盤敲任一鍵時,程序才繼續執行, 因此用戶可利用這個等待時間閱讀出錯提示。敲鍵後執行exit(1)退出程序。

6. 把一個文本文件讀入內存時,要將ASCII碼轉換成二進制碼, 而把文件以文本方式寫入磁碟時,也要把二進制碼轉換成ASCII碼,因此文本文件的讀寫要花費較多的轉換時間。對二進制文件的讀寫不存在這種轉換。

7. 標准輸入文件(鍵盤),標准輸出文件(顯示器 ),標准出錯輸出(出錯信息)是由系統打開的,可直接使用。文件關閉函數fClose文件一旦使用完畢,應用關閉文件函數把文件關閉, 以避免文件的數據丟失等錯誤。

fclose函數

調用的一般形式是: fclose(文件指針); 例如:

fclose(fp); 正常完成關閉文件操作時,fclose函數返回值為0。如返回非零值則表示有錯誤發生。文件的讀寫對文件的讀和寫是最常用的文件操作。

在C語言中提供了多種文件讀寫的函數:

·字元讀寫函數 :fgetc和fputc

·字元串讀寫函數:fgets和fputs

·數據塊讀寫函數:freed和fwrite

·格式化讀寫函數:fscanf和fprinf

下面分別予以介紹。使用以上函數都要求包含頭文件stdio.h。字元讀寫函數fgetC和fputC字元讀寫函數是以字元(位元組)為單位的讀寫函數。 每次可從文件讀出或向文件寫入一個字元。

一、讀字元函數fgetc

fgetc函數的功能是從指定的文件中讀一個字元,函數調用的形式為: 字元變數=fgetc(文件指針); 例如:ch=fgetc(fp);其意義是從打開的文件fp中讀取一個字元並送入ch中。

對於fgetc函數的使用有以下幾點說明:

1. 在fgetc函數調用中,讀取的文件必須是以讀或讀寫方式打開的。

2. 讀取字元的結果也可以不向字元變數賦值,例如:fgetc(fp);但是讀出的字元不能保存。

3. 在文件內部有一個位置指針。用來指向文件的當前讀寫位元組。在文件打開時,該指針總是指向文件的第一個位元組。使用fgetc 函數後, 該位置指針將向後移動一個位元組。 因此可連續多次使用fgetc函數,讀取多個字元。 應注意文件指針和文件內部的位置指針不是一回事。文件指針是指向整個文件的,須在程序中定義說明,只要不重新賦值,文件指針的值是不變的。文件內部的位置指針用以指示文件內部的當前讀寫位置,每讀寫一次,該指針均向後移動,它不需在程序中定義說明,而是由系統自動設置的。

[例10.1]讀入文件e10-1.c,在屏幕上輸出。

#include<stdio.h>
main()
{
FILE *fp;
char ch;
if((fp=fopen("e10_1.c","rt"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
ch=fgetc(fp);
while (ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
fclose(fp);
}

本常式序的功能是從文件中逐個讀取字元,在屏幕上顯示。 程序定義了文件指針fp,以讀文本文件方式打開文件「e10_1.c」, 並使fp指向該文件。如打開文件出錯, 給出提示並退出程序。程序第12行先讀出一個字元,然後進入循環, 只要讀出的字元不是文件結束標志(每個文件末有一結束標志EOF)就把該字元顯示在屏幕上,再讀入下一字元。每讀一次,文件內部的位置指針向後移動一個字元,文件結束時,該指針指向EOF。執行本程序將顯示整個文件。

二、寫字元函數fputc

fputc函數的功能是把一個字元寫入指定的文件中,函數調用的 形式為: fputc(字元量,文件指針); 其中,待寫入的字元量可以是字元常量或變數,例如:fputc('a',fp);其意義是把字元a寫入fp所指向的文件中。

對於fputc函數的使用也要說明幾點:

1. 被寫入的文件可以用、寫、讀寫,追加方式打開,用寫或讀寫方式打開一個已存在的文件時將清除原有的文件內容,寫入字元從文件首開始。如需保留原有文件內容,希望寫入的字元以文件末開始存放,必須以追加方式打開文件。被寫入的文件若不存在,則創建該文件。

2. 每寫入一個字元,文件內部位置指針向後移動一個位元組。

3. fputc函數有一個返回值,如寫入成功則返回寫入的字元, 否則返回一個EOF。可用此來判斷寫入是否成功。

[例10.2]從鍵盤輸入一行字元,寫入一個文件, 再把該文件內容讀出顯示在屏幕上。

#include<stdio.h>
main()
{
FILE *fp;
char ch;
if((fp=fopen("string","wt+"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
printf("input a string:\n");
ch=getchar();
while (ch!='\n')
{
fputc(ch,fp);
ch=getchar();
}
rewind(fp);
ch=fgetc(fp);
while(ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
printf("\n");
fclose(fp);
}

程序中第6行以讀寫文本文件方式打開文件string。程序第13行從鍵盤讀入一個字元後進入循環,當讀入字元不為回車符時, 則把該字元寫入文件之中,然後繼續從鍵盤讀入下一字元。 每輸入一個字元,文件內部位置指針向後移動一個位元組。寫入完畢, 該指針已指向文件末。如要把文件從頭讀出,須把指針移向文件頭, 程序第19行rewind函數用於把fp所指文件的內部位置指針移到文件頭。 第20至25行用於讀出文件中的一行內容。

[例10.3]把命令行參數中的前一個文件名標識的文件, 復制到後一個文件名標識的文件中, 如命令行中只有一個文件名則把該文件寫到標准輸出文件(顯示器)中。

#include<stdio.h>
main(int argc,char *argv[])
{
FILE *fp1,*fp2;
char ch;
if(argc==1)
{
printf("have not enter file name strike any key exit");
getch();
exit(0);
}
if((fp1=fopen(argv[1],"rt"))==NULL)
{
printf("Cannot open %s\n",argv[1]);
getch();
exit(1);
}
if(argc==2) fp2=stdout;
else if((fp2=fopen(argv[2],"wt+"))==NULL)
{
printf("Cannot open %s\n",argv[1]);
getch();
exit(1);
}
while((ch=fgetc(fp1))!=EOF)
fputc(ch,fp2);
fclose(fp1);
fclose(fp2);
}

本程序為帶參的main函數。程序中定義了兩個文件指針 fp1 和fp2,分別指向命令行參數中給出的文件。如命令行參數中沒有給出文件名,則給出提示信息。程序第18行表示如果只給出一個文件名,則使fp2指向標准輸出文件(即顯示器)。程序第25行至28行用循環語句逐個讀出文件1中的字元再送到文件2中。再次運行時,給出了一個文件名(由例10.2所建立的文件), 故輸出給標准輸出文件stdout,即在顯示器上顯示文件內容。第三次運行,給出了二個文件名,因此把string中的內容讀出,寫入到OK之中。可用DOS命令type顯示OK的內容:

⑨ C語言中如何調用文本文件

1、首先使用VS新建空工程,直接點擊確定。

⑩ C語言中的.a文件

你代碼用到的圖形函數都在這些.a文件中定義,所以把他們鏈接到你的程序中,以供程序調用裡面的函數。