第一篇:Makefile萬(wàn)能通用版(C++和C混合編譯也適用)
1.、該Makefile 是我自己寫(xiě)的,可用于編譯均是.c文件的工程,基本不用修改什么東西。
2、將該文件拷貝到工程文件夾下,在終端執(zhí)行:
#make create(將會(huì)在根目錄下創(chuàng)建出include, src, bin 三個(gè)目錄)
#make 即可編譯
#make clean刪除所有生成的中間文件和可執(zhí)行文件
3、如果需要編譯C++的.cpp和C語(yǔ)言的.c文件,即C、C++混合編譯,將CC=gcc 改為CC=g++即可。(如果還不行,那就需要在.cpp文件的extern “C”中將被調(diào)用的.c聲明一下,或者將所有.c文件做成成靜態(tài)庫(kù),后者適合.c文件較多的情況)
CC=gcc
CFLAGS=-o
PARAM=-Wall
CUR=$(shell pwd)
SRC=$(CUR)/src
SRCS=$(SRC)/*.c
TARGET=$(CUR)/bin/exe
.PHONY:$(TARGET)
all:$(TARGET)
$(TARGET):$(SRCS)
$(CC)$^ $(CFLAGS)$@ $(PARAM)
clean:
@-rm-rf $(TARGET)
@-rm-rf $(CUR)/include/*~
@-rm-rf $(SRC)/*~
@-rm-rf $(CUR)/*~
create:
@-mkdir src/
@-mkdir include/
@-mkdir bin/
第二篇:VC++6.0中如何編譯運(yùn)行C語(yǔ)言程序
VC++6.0中如何編譯運(yùn)行C語(yǔ)言程序
VC++6.0是Microsoft公司推出的一個(gè)基于Windows系統(tǒng)平臺(tái)、可視化的集成開(kāi)發(fā)環(huán)境,它的源程序按C++語(yǔ)言的要求編寫(xiě),并加入了微軟提供的功能強(qiáng)大的MFC(Microsoft Foundation Class)類庫(kù)。具有高度可視化的應(yīng)用程序開(kāi)發(fā)工具,不僅適合大型軟件的開(kāi)發(fā),對(duì)于初學(xué)C語(yǔ)言和C++的朋友來(lái)說(shuō),也是一個(gè)不錯(cuò)的運(yùn)行工具。
接下來(lái)筆者就簡(jiǎn)單介紹一下VC++6.0如何編譯運(yùn)行C語(yǔ)言程序
1.單個(gè)源文件的編譯運(yùn)行
例如下面的源代碼
#include
(圖1)
選擇“文件”→“新建”,打開(kāi)如圖2所示
(圖2)
選擇“文件”項(xiàng),如圖3所示
(圖3)
選擇“C++ Source File”項(xiàng),并在“文件名”項(xiàng)目下輸入“sum.c”如圖4所示
(圖4)單擊“確定”,打開(kāi)如圖5所示
(圖5)
輸入如上源代碼,如圖6所示
(圖6)
選擇“組建”→“編譯”(或按Ctrl+F7組合鍵),打開(kāi)如圖7所示
(圖7)
在下端的輸出窗口會(huì)有錯(cuò)誤和警告的提示,如果沒(méi)有錯(cuò)誤選擇“組建”→“執(zhí)行”(或按Ctrl+F5組合鍵)即可出現(xiàn)運(yùn)行結(jié)果,如圖8所示
(圖8)
2.多個(gè)源文件的編譯運(yùn)行
以上是運(yùn)行單個(gè)源文件的情況,但是在程序設(shè)計(jì)時(shí),往往是由幾個(gè)人各自獨(dú)立編寫(xiě)不同的程序,顯然這些程序是不能寫(xiě)在一起進(jìn)行編譯的,這時(shí)就需要建立項(xiàng)目工作區(qū)來(lái)完成幾個(gè)獨(dú)立程序的編譯,具體方法如下。
首先建立兩個(gè)文本文件,分別命名為“file1.c”和“file.c”,分別在兩個(gè)文件中輸入如下兩個(gè)源代碼,然后保存。源代碼1:
#include
} void sum();sum();源代碼2:
#include
} int i,sum=0;for(i=1;i<=10;i++){ } printf(“sum=%dn”,sum);sum=sum+i;打開(kāi)VC++6.0,選擇“文件”→“新建”打開(kāi)如圖9所示
(圖9)
選擇“工作區(qū)”項(xiàng),并在“工作空間名稱”項(xiàng)目下輸入“sum”如圖10所示
(圖10)單擊“確定”,打開(kāi)如圖11所示
(圖11)
在左側(cè)的“工作區(qū)窗口”顯示了新建立的工作區(qū)
選擇“文件”→“新建”打開(kāi)如圖9所示,在“工程”項(xiàng)目下選擇“Win32 Console Application”項(xiàng),并在“工程名稱”項(xiàng)目下輸入工程名稱,如“sum”,選擇“添加到當(dāng)前工作空間”項(xiàng),如圖12所示
(圖12)
單擊“確定”,打開(kāi)如圖13
(圖13)
選擇“一個(gè)空工程”項(xiàng),單擊“完成”,打開(kāi)如圖14所示
(圖14)
單擊“確定”,打開(kāi)如圖15所示
(圖15)
在左側(cè)的“工作區(qū)窗口”顯示了新建立的工程
選擇“工程”→“添加到工程”→“文件”,打開(kāi)如圖16所示
(圖16)
選擇剛剛創(chuàng)建的兩個(gè)文件,單擊“確定”,打開(kāi)如圖17所示
(圖17)
選擇“組建”→“組建”(或按F7鍵),打開(kāi)如圖18所示
(18)
在下端的輸出窗口會(huì)有錯(cuò)誤和警告的提示,如果沒(méi)有錯(cuò)誤選擇“組建”→“執(zhí)行”(或按Ctrl+F5)即可出現(xiàn)運(yùn)行結(jié)果,如圖19所示
(圖19)
第三篇:C語(yǔ)言程序設(shè)計(jì)教案 第九章 編譯預(yù)處理
第九章 編譯預(yù)處理
課題:
教學(xué)目的: 教學(xué)重點(diǎn): 教學(xué)難點(diǎn): 第九章 編譯預(yù)處理
1、了解預(yù)處理的概念及特點(diǎn)
2、掌握有參宏與無(wú)參宏的定義及使用,領(lǐng)會(huì)文件包含的使用及效果 掌握宏的使用,文件包含 有參宏與無(wú)參宏的使用
步驟一 復(fù)習(xí)引導(dǎo)
ANSI C標(biāo)準(zhǔn)規(guī)定可以在C源程序中加入一些“預(yù)處理命令”,以改進(jìn)程序設(shè)計(jì)環(huán)境,提高編程效率。
這些預(yù)處理命令是由ANSI C統(tǒng)一規(guī)定的,但它不是C語(yǔ)言本身的組成部分,不能直接對(duì)它們進(jìn)行編譯。必須在對(duì)程序進(jìn)行通常的編譯之前,先對(duì)程序中這些特殊的命令進(jìn)行“預(yù)處理”,即根據(jù)預(yù)處理命令對(duì)程序作相應(yīng)的處理。經(jīng)過(guò)預(yù)處理后程序不再包括預(yù)處理命令了,最后再由編譯程序?qū)︻A(yù)處理后的源程序進(jìn)行通常的編譯處理,得到可供執(zhí)行的目標(biāo)代碼。
步驟二 講授新課
C語(yǔ)言與其他高級(jí)語(yǔ)言的一個(gè)重要區(qū)別是可以使用預(yù)處理命令和具有預(yù)處理的功能。C提供的預(yù)處理功能主要有以下三種: 宏定義、文件包含、條件編譯。
分別用宏定義命令、文件包含命令、條件編譯命令來(lái)實(shí)現(xiàn)。為了與一般C語(yǔ)句相區(qū)別,這些命令以符號(hào)“ #” 開(kāi)頭。
§9.1宏定義
宏: 代表一個(gè)字符串的標(biāo)識(shí)符。
宏名:被定義為“宏”的標(biāo)識(shí)符。
宏代換(展開(kāi)):在編譯預(yù)處理時(shí),對(duì)程序中所有出現(xiàn)的 “宏名”,用宏定義中的字符串去代換的過(guò)程。
一、不帶參數(shù)的宏定義
一般形式:
#define
標(biāo)識(shí)符
字符串
#define PI 3.1415926
main()
{ float l, s, r, v;
printf(“input radius:”);
scanf(“%f”, &r);
l = 2.0*PI*r;
s = PI*r*r;
v = 3.0/4*PI*r*r*r;
printf(“%10.4f,%10.4f,%10.4n”, l, s, v);
}
例如:由鍵盤(pán)輸入y值,求表達(dá)式:
3(y2+3y)+ 4(y2+3y)+ y(y2+3y)#define M(y*y+3*y)main(){ int s, y;
printf(“Input a number :”);scanf(“%d”,&y);
s=3*M+4*M+y*M;
printf(“s=%dn”,s);} 先宏展開(kāi):s=3*(y*y+3*y)+4*(y*y+3*y)+ y*(y*y+3*y)再與源程序合并
說(shuō)明:
⑴宏名一般用大寫(xiě)表示,以便與變量名區(qū)分。⑵使用宏名使程序易讀,易修改。⑶只作簡(jiǎn)單的置換,不作正確性檢查。⑷宏定義不是C語(yǔ)句,不必在行末加分號(hào)。
⑸宏名的作用域一般從自定義命令到本源文件結(jié)束。⑹可以用# undef命令終止宏定義的作用域。⑺宏定義允許嵌套,允許層層置換。
⑻宏名在源程序中用雙引號(hào)括起來(lái),則TC中預(yù)處理不對(duì)其作宏代換。
例: printf(“L=%f”, L);中雙引號(hào)內(nèi)L不替換。
⑼宏定義與定義的變量不同,宏只作字符替換,不分配內(nèi)存空間。⑽對(duì)“輸出格式”進(jìn)行宏定義,可以減少書(shū)寫(xiě)麻煩 例如:
#define P printf #define D “%d,%d,%dn”
#define F “%6.2f,%6.2f,%6.2fn” main(){ int a=5,c=8,e=11;
float b=3.8,d=9.7;f=21.08;
P(D,a,c,e);
P(F,b,d,f);
P(F,a+b,c+d,e+f);}
二、帶參數(shù)的宏定義
格式:#define
宏名(參數(shù)表)字符串
例:#define s(a,b)a*b
{……
area =s(3,2);
……}
對(duì)帶參的宏展開(kāi)后,為area=3*2;
例: #define M(y)y*y+3*y
{……
k=M(5);
……}
對(duì)其展開(kāi)后,為k=5*5+3*5;
說(shuō)明:
⑴對(duì)帶參數(shù)的宏展開(kāi)只是將宏名后括號(hào)內(nèi)的實(shí)參
字符串代替#define命令行中的形參。
⑵宏定義時(shí),在宏名與帶參數(shù)的括號(hào)之間不應(yīng)加
空格,否則將空格以后的字符都作為替代字符
串的一部分。
⑶帶參宏定義,形參不分配內(nèi)存單元,因此不必
作類型定義。(與函數(shù)的區(qū)別之一)⑷帶參宏與函數(shù)的區(qū)別之二:
例如: main(){ int i=1;
while(i<=5)
printf(“%dt”,SQ(i++));} SQ(int y){ return(y)*(y);} 其結(jié)果為:1
如:
#define SQ(y)((y)*(y))main(){ int i =1;
while(i<=5)
printf(“%dt”,SQ(i++));} 運(yùn)行結(jié)果: 2 12 30
例:利用宏定義求兩個(gè)數(shù)中的大數(shù)。
#define MAX(a,b)(a>b)?a:b main(){int x, y, max;
scanf(“%d%d”, &x, &y);
max =MAX(x, y);
printf(“max=%dn”, max);} 帶參的宏定義和函數(shù)不同:
1、函數(shù)調(diào)用時(shí),先求實(shí)參表達(dá)式值,后代入。而帶參的宏只是進(jìn)行簡(jiǎn)單的字符替換。
2、函數(shù)調(diào)用是在程序運(yùn)行時(shí)處理的,分配臨時(shí)的內(nèi)存單元。而宏展開(kāi)則是在編譯時(shí)進(jìn)行的,不分配內(nèi)存單元,不進(jìn)行值的傳遞,也無(wú)“返回值”。
3、對(duì)函數(shù)中的實(shí)參和形參都要定義類型,類型應(yīng)一致。而宏不存在類型問(wèn)題,宏名和參數(shù)無(wú)類型,只是一個(gè)符號(hào)代表,展開(kāi)時(shí)代入指定的字符即可。
4、調(diào)用函數(shù)只可得到一個(gè)返回值,而用宏可以設(shè)法得到幾個(gè)結(jié)果。
5、使用宏次數(shù)多時(shí),宏展開(kāi)后使源程序增長(zhǎng),而函數(shù)調(diào)用不使源程序變長(zhǎng)。
6、宏替換不占運(yùn)行時(shí)間,只占編譯時(shí)間。
而函數(shù)調(diào)用則占用運(yùn)行時(shí)間(分配單元、保留現(xiàn)場(chǎng)、值傳遞、返回)一般用宏代表簡(jiǎn)短的表達(dá)式比較合適。
也可利用宏定義實(shí)現(xiàn)程序的簡(jiǎn)化。例9.5:
#define PR printf #define NL “n” #define D “%d” #define D1 D NL #define D2 D D NL #define D3 D D D NL #define D4 D D D D NL #define S “%s” main(){ int a,b,c,d;
char string[]=“CHINA”;
a=1;b=2;c=3;d=4;
PR(D1,a);
PR(D2,a,b);
PR(D3,a,b,c);
PR(D4,a,b,c,d);
PR(S, string);}
§9.2 “文件包含”處理
“文件包含”處理是指將指定的被包含文件的全部?jī)?nèi)容插到該控制行的位置處,使其成為源文件的一部分參與編譯。因此,被包含的文件應(yīng)該是源文件。通常置于源程序文件的首部,故也稱為“頭文件”。
C編譯系統(tǒng)提供的頭文件擴(kuò)展名為“.h”,但設(shè)計(jì)者可根據(jù)實(shí)際情況,自行確定包含文件的后綴、名字及其位置。
一般形式,#include “文件名”
或
#include <文件名>
文件format.h
#define PR printf #define NL “n” #define D “%d” #define D1 D NL #define D2 D D NL #define D3 D D D NL #define D4 D D D D NL #define S “%s” 文件file1.c #include “format.h” main(){ int a,b,c,d;
char string[]=“CHINA”;
a=1;b=2;c=3;d=4;
PR(D1,a);
PR(D2,a,b);
PR(D3,a,b,c);
PR(D4,a,b,c,d);
PR(S, string);} 注:被包含的文件應(yīng)是源文件,而不應(yīng)是目標(biāo)文件。
頭文件除了可以包含函數(shù)原型和宏定義外,也可以包括結(jié)構(gòu)體類型定義和全局變量定義等。說(shuō)明:
1、一個(gè)include命令只能指定一個(gè)被包含文件,如果要包含n個(gè)文件,要用n個(gè)include命令。
2、如果文件1包含文件2,而文件2中要用到文件3的內(nèi)容,則可在文件1中用兩個(gè)include命令分別包含文件2和文件3,而且文件3應(yīng)出現(xiàn)在文件2之前,即在“file1.c”中定義:
#include “file3.h”
#include “file2.h”
3、在一個(gè)被包含文件中又可以包含另一個(gè)被包含文件,即文件包含是可以嵌套的。
4、被包含文件(file2.h)與其所在的文件(file1.c),在預(yù)編譯后已成為同一個(gè)文件。
5、在#include 命令中,文件名可以用雙引號(hào)或尖括號(hào)括起來(lái)。
如: #include
或
#include “file2.h” 二者的區(qū)別:
用尖括號(hào)時(shí)稱為標(biāo)準(zhǔn)方式,系統(tǒng)到存放C庫(kù)頭文件所在的目錄中尋找要包含的文件。
用雙引號(hào)時(shí),系統(tǒng)先在用戶當(dāng)前目錄中尋找要包含的文件,若找不到,再按標(biāo)準(zhǔn)方式查找。#include “c:tcincludemyfile.h”
/*正確*/ #include
/*正確*/ #include
/*錯(cuò)誤*/
用尖括號(hào):帶路徑:按指定路徑去尋找被包含文件,但此時(shí)被包含文件不能以“.h”結(jié)尾,否則錯(cuò)誤。
不帶路徑:僅從指定標(biāo)準(zhǔn)目錄下找。
用引號(hào): 帶路徑:按指定路徑去尋找被包含文件,不再?gòu)漠?dāng)前目錄和指定目錄下找。
不帶路徑:先在當(dāng)前目錄下找,找不到再在系統(tǒng)指定的標(biāo)準(zhǔn)目錄下找。
步驟三 課堂小結(jié)
本課主要講解了宏定義、“文件包含”處理。對(duì)帶參數(shù)的宏的使用,及與函數(shù)的使用的區(qū)別。搞清經(jīng)常使用的頭文件。
步驟四 布置作業(yè) 上機(jī)作業(yè):(第九章課后練習(xí))9.4 書(shū)面作業(yè):(第九章課后練習(xí))9.7、9.8
第四篇:C語(yǔ)言也能干大事
1.格式:MessageBox(NULL,TEXT(“”),TEXT(“”),MB_OKCANCEL|MB_ICONQUESTION);
2.按鈕:MB_OK,MB_OKCANCEL,MB_YESONCANCEL,MB_RETRYCANCEL,MB_ABORTRETRYIGNORE;
確定,確定取消,是否取消,重試取消,終止,重試忽視
3.圖標(biāo):MB_ICONHAND,MB_ICONQUESTION,ICONEXCLAMATION(感嘆),MB_ICONASTERISK;
4.取返回值
int ret=MessageBox(NULL,TEXT(“”),TEXT(“”),MB_OKCANCEL|MB_ICONQUESTION);if(IDOK==ret){}else{};
5.C語(yǔ)言(網(wǎng)絡(luò),數(shù)據(jù)庫(kù),圖形學(xué),內(nèi)核等)一通百通,一切語(yǔ)言都是紙老虎。如鵬網(wǎng)!
6.怎樣把程序發(fā)給別人(debug,release);將debug轉(zhuǎn)成release,從新編譯.
第五篇:《c語(yǔ)言程序設(shè)計(jì)新視角》第九章編譯預(yù)處理小結(jié)
《c語(yǔ)言程序設(shè)計(jì)新視角》第九章 編譯預(yù)處理小結(jié) 編譯是把語(yǔ)句翻譯成機(jī)器碼,預(yù)編譯是在譯碼前進(jìn)行的處理法,文件包含把已有的文件為我所用來(lái)添加,宏定義的作用是替換,方便程序編輯的好方法,條件編譯可實(shí)現(xiàn)按需編譯,方便調(diào)試讓代碼適應(yīng)性更佳。