『壹』 《c語言解惑:指針、數組、函數和多文件編程》pdf下載在線閱讀全文,求百度網盤雲資源
《C語言解惑:指針、數組、函數和多文件編程》(劉振安/劉燕君)電子書網盤下載免費在線閱讀
鏈接:https://pan..com/s/1Y7ByiEwRtV18USBvYY3uvw
書名:C語言解惑:指針、數組、函數和多文件編程
作者:劉振安/劉燕君
出版社:機械工業出版社
出版年:2016-12-1
頁數:443
內容簡介
本書的前提是讀者已經學過C語言,書中將完整、系統地論述各個部分的知識並結合實用程序和趣味游戲程序,綜合講解函數設計、多文件編程和結構化程序設計的方法。本書既可以作為教師、學生及工程技術人員的參考書,也可以作為常備手冊。
作者簡介
中國科學技術大學信息學院教授,曾任全國高等教育自學考試委員會委員,全國計算機等級考試委員會委員,GPS實驗室主任。獲省部科技二等獎2次,三等獎一次,貝爾教學一等獎一次。主持並完成國家自然基金兩項、863項目1項、部委、軍工口及合肥市項目多項。主要研究方向是圖像處理與通信及GPS應用。出版專著二部,編寫各類教材幾十部(含C語言教材十餘部),其中獲獎教材多部。
『貳』 c語言 多文件多函數結構
C++編程入門系列之二十四(C++程序設計必知:多文件結構和編譯預處理命令)分類標簽: C++ 編程入門 -
雞啄米上一講給大家講了常引用、常對象和對象的常成員,今天給大家講下編程入門知識--多文件結構和編譯預處理命令。
一.C++程序的多文件結構
之前雞啄米給大家看了很多比較完整的C++程序的例子,大家可能發現了,它們的結構基本上可以分為三個部分:類的聲明、類的成員函數的實現和主函數。因為代碼比較少,所以可以把它們寫在一個文件中,但是我們實際進行軟體開發時,程序會比較復雜,代碼量比較大,
一個程序按結構至少可以劃分為三個文件:類的聲明文件(*.h文件)、類的實現文件(*.cpp文件)和主函數文件(使用到類的文件),如果程序更復雜,我們會為每個類單獨建一個聲明文件和一個實現文件。這樣我們要修改某個類時就直接找到它的文件修改即可,不需要其他的文件改動。
雞啄米在第十九講中講生存期時有個時鍾類的例子,現在雞啄米給大家看下將那個程序按照上面說的結構分到三個文件里:
// 文件1:Clock類的聲明,可以起名為Clock.h
#include <iostream>
using namespace std;
class Clock //時鍾類聲明
{
public: //外部介面
Clock();
void SetTime(int NewH, int NewM, int NewS); //三個形參均具有函數原型作用域
void ShowTime();
~Clock(){}
private: //私有數據成員
int Hour,Minute,Second;
};
// 文件2:Clock類的實現,可以起名為Clock.cpp
#include "Clock.h"
//時鍾類成員函數實現
Clock::Clock() //構造函數
{
Hour=0;
Minute=0;
Second=0;
}
void Clock::SetTime(int NewH,int NewM,int NewS)
{
Hour=NewH;
Minute=NewM;
Second=NewS;
}
void Clock::ShowTime()
{
cout<<Hour<<":"<<Minute<<":"<<Second<<endl;
}
// 文件3:主函數,可以起名為main.cpp
#include "Clock.h"
//聲明全局對象g_Clock,具有文件作用域,靜態生存期
Clock g_Clock;
int main() //主函數
{
cout<<"文件作用域的時鍾類對象:"<<endl;
//引用具有文件作用域的對象:
g_Clock.ShowTime();
g_Clock.SetTime(10,20,30);
Clock myClock(g_Clock); //聲明具有塊作用域的對象myClock,並通過默認拷貝構造函數用g_Clock初始化myClock
cout<<"塊作用域的時鍾類對象:"<<endl;
myClock.ShowTime(); //引用具有塊作用域的對象
}
在vs2010中如何生成這三個文件呢?我們可以點菜單中Project->Add Class,在彈出的對話框中選擇c++ class,然後由彈出個對話框,在class name處填上類名點finish就可以了,這樣.h文件和.cpp文件會自動生成,我們也可以點Project->Add New Item,在彈出的對話框中選擇Header File(.h)或C++ File(.cpp)來生成.h文件或.cpp文件。
Clock.cpp和main.cpp都使用#include "Clock.h"把類Clock的頭文件Clock.h包含進來。#include指令的作用就是將#include後面的文件嵌入到當前源文件該點處,被嵌入的文件可以是.h文件也可以是.cpp文件。如果不包含Clock.h,Clock.cpp和main.cpp就不知道Clock類的聲明形式,就無法使用此類,所以所有使用此類的文件都應該包含聲明它的頭文件。關於#include指令下面雞啄米會講。
上面的程序在編譯時,由Clock.cpp和Clock.h編譯生成Clock.obj,由main.cpp和Clock.h編譯生成main.obj,然後就是鏈接過程,Clock.obj和main.obj鏈接生成main.exe可執行文件。如果我們只修改了類的實現文件,那麼只需重新編譯Clock.cpp並鏈接就可以,別的文件不用管,這樣就提高了效率。在Windows系統中的C++程序用工程來管理多文件結構,而Unix系統一般用make工具管理,如果大家從事Unix系統軟體開發,就需要自己寫make文件。
二.編譯預處理程序
編譯器在編譯源程序以前,要由預處理程序對源程序文件進行預處理。預處理程序提供了一些編譯預處理指令和預處理操作符。預處理指令都要由「#」開頭,每個預處理指令必須單獨佔一行,而且不能用分號結束,可以出現在程序文件中的任何位置。
1.#include指令
#include指令也叫文件包含指令,用來將另一個源文件的內容嵌入到當前源文件該點處。其實我們一般就用此指令來包含頭文件。#include指令有兩種寫法:
#include <文件名>
使用這種寫法時,會在C++安裝目錄的include子目錄下尋找<>中標明的文件,通常叫做按標准方式搜索。
#include "文件名"
使用這種寫法時,會先在當前目錄也就是當前工程的目錄中尋找""中標明的文件,若沒有找到,則按標准方式搜索。
2.#define和#undef指令
如果你學過C語言,就會知道用#define可以定義符號常量,比如,#define PI 3.14 這條指令定義了一個符號常量PI,它的值是3.14。C++也可以這樣定義符號常量,但一般更常用的是在聲明時用const關鍵字修飾。C語言還用#define定義參數宏,來實現簡單的函數運算,比如,#define add(x,y) (x+y) 這條指令說明如果我們用到add(1,2)則預處理後就會用(1+2)代替,C++中一般用內聯函數來實現。
#undef用來刪除由#define定義的宏,使其不再起作用。
3.條件編譯指令
用條件編譯指令可以實現某些代碼在滿足一定條件時才會參與編譯,這樣我們可以利用條件編譯指令將同一個程序在不同的編譯條件下生成不同的目標代碼。例如,我們可以在調試程序時加入一些調試語句,用條件編譯指令控制只有在debug模式下這些調試語句才參與編譯,而在release模式下不參與編譯。
條件編譯指令有5中形式:
a.第一種形式:
#if 常量表達式
程序正文 //當「 常量表達式」非零時本程序段參與編譯
#endif
b.第二種形式:
#if 常量表達式
程序正文1 //當「 常量表達式」非零時本程序段參與編譯
#else
程序正文2 //當「 常量表達式」為零時本程序段參與編譯
#endif
c.第三種形式:
#if 常量表達式1
程序正文1 //當「 常量表達式1」非零時本程序段參與編譯
elif 常量表達式2
程序正文2 //當「常量表達式1」為零、「 常量表達式2」非零時本程序段參與編譯
...
elif 常量表達式n
程序正文n //當「常量表達式1」、...、「常量表達式n-1」均為零、「 常量表達式n」非零時本程序段參與編譯
#else
程序正文n+1 //其他情況下本程序段參與編譯
#endif
d.第四種形式:
#ifdef 標識符
程序段1
#else
程序段2
#endif
如果「標識符」經#defined定義過,且未經undef刪除,則編譯程序段1,否則編譯程序段2。
e.第五種形式:
#ifndef 標識符
程序段1
#else
程序段2
#endif
如果「標識符」未被定義過,則編譯程序段1,否則編譯程序段2。
4.define操作符
define是預處理操作符,不是指令,所以不能用#開頭。使用形式為:define(標識符)。如果括弧里的標識符用#define定義過,並且沒有用#undef刪除,則define(標識符)為非0,否則為0。可以這樣使用:
#if !define(HEAD_H)
#define HEAD_H
我們在包含頭文件時,有時多次重復包含同一個頭文件,比如下面這種情況:
// main.cpp文件
#include "file1.h"
#include "file2.h"
int main()
{
…
}
// file1.h文件
#include "head.h"
…
// file2.h文件
#include "head.h"
…
// head.h文件
...
class A
{
...
}
...
main.cpp包含了file1.h文件,file1.h又包含了head.h文件,main.cpp還包含了file2.h文件,file2.h也包含了head.h文件,那麼main.cpp就包含了兩次head.h文件,在編譯時就會報錯,說head.h中的類A重復定義了。這時我們可以在被重復包含的文件head.h中使用條件編譯指令,用一個唯一的標識符來標識head.h文件是否已經編譯過,如果已經編譯過則不會重復編譯了。雞啄米給大家改寫下上面的head.h文件:
// head.h文件
#ifndef HEAD_H
#define HEAD_H
...
class A
{
...
}
...
#endif
在這個改好的head.h文件中,上來會先判斷HEAD_H是否被定義過,如果沒有被定義過,則head.h文件還沒參與過編譯,就編譯此文件中的源代碼,同時定義HEAD_H,標記head.h文件已經參與過編譯。如果HEAD_H已經被定義過,則說明此文件已經參與過編譯,編譯器會跳過本文件左右內容編譯其他部分,類A也不會有重復定義的錯誤了。
『叄』 c語言中如何同時運行多個源文件
第一步:
將源文件1(1.c)修改為如下形式:
#include "print.h"
#include "2.c"
int main(void)
{
printHello();
return 0;
}
其中的2.c就是源文件2的文件名
第二步,將三個文件保存到同一目錄中
第三步,打開TC2,執行FILE-CHANGE DIR,將工作目錄換到三個文件所在的目錄。
第四步,在TC2中打開1.c文件,編譯運行。
建議不要再使用TC2這個相對原始的IDE了,上面介紹的這個方法也並不是標准方法,建議使用TC2006/VC/BCB等現代的IDE環境,如果實在是舍棄不下DOS字元界面,那就試試GCC吧!
『肆』 C語言多文件編程
多個c文件的作用在於將不同功能的代碼分開來實現,這樣便於代碼重用、代碼編譯和代碼管理。
一個程序中,只能有一個main函數,這是整個程序的起點和入口。如果其他人也實現了該函數,則必須要重新命名,然後在唯一的main函數中統一調用。
多個c文件的合並並沒有順序要求,任何一個都可以先編譯或者後編譯。
extern表示導出,可以用於函數和變數。用於函數的時候,表示這是一個外部函數,用於變數的時候,表示這是一個外部變數。
如果使用一個c文件,多個h文件,則會導致改動代碼任何一個地方,都要重新編譯所有的文件,效率上非常不劃算。而使用多個c文件,當代碼發生變更的時候,僅僅相關的c文件代碼需要重新編譯,其他代碼則可以保持不變,不用參與編譯。
函數中的局部變數無法在函數外部調用,只能通過參數傳遞的方式傳遞給第三方函數。因為局部變數是出於棧上面的,棧會隨著函數調用完畢的時候被系統回收。
『伍』 如何用VC++建立多文件編程
就是建一個工程:
打開VC++,執行「文件」——「新建」命令,單擊「Win32 Console Application」選項後,在「工程」文本框中輸入「prog10_1」,在「位置」中選擇「c:\programming」後,「位置」文本框中即顯示「c:\programming\prog10_1」.選擇「創建新工作區」選項,單擊「確定」按鈕後,在選擇「An empty project」選項,即建立了一個工程。
添加源程序:
執行「工程」——'添加工程"命令,在file中選擇prog10_1.cpp,並以同樣方式選擇prog10_1_2.cpp和prog10_1_3.cpp後,就將三個源文件全部添加到了工程中。在左側窗口中單擊"File view"選項卡,再單擊"Source File",此時雙擊某個源文件名,在右側窗口中即顯示相應的源程序。
『陸』 C語言中,如何用多個文件編寫程序
1.
將一個函數寫在一個文件里,然後再在另一個文件里用「include」包含這個文件。
2.
舉例:
在文件c1.c里編一個函數:
void
printWord(){
printf("Hello!world!");
}
再建立一個文件c2.c,文件開頭寫上#include"c1.c",就可以調用c1.c里的函數printword()了
這樣通過include操作,可以把任意多個文件連接起來,編譯成一個程序運行。
『柒』 C語言、C++:關於多文件編程
你如果是用編譯器自動生成的文件,編譯器自動加到項目里,自己寫的,你要手動在項目中添加文件,編譯器才會檢索,編譯器只檢索屬於項目的文件
1,.c或者.cpp不需要包含,如果你是用VS系列,.h和.cpp是一對的,你包含了X.h就是能使用X.cpp的資源、你自己想包含的話那也無所謂,一般是編譯器做的
2 .h可以添加實現,一切都可以添加。但是為了代碼的隱藏和符合編程的機制,一般都放到對應的.cpp。簡短的函數可以直接放在.h,你自己找起來也方便
3.包含了.h就能直接使用對應的.C。項目中這種事情一般讓編譯器去實現。其實編譯的時候,編譯器會自動檢索所有文件,只要你有聲明,實現不管你寫在哪,編譯器都會找到的,寫在對應的.h和.cpp是為了方便和規范的需要