Download as pdf or txt
Download as pdf or txt
You are on page 1of 7

Bin dch Bin dch ring r

Lp trnh hng i tng

Bin dch
n n

Ch hng dn bin dch trong mi trng Unix, sinh vin t tm hiu i vi cc mi trng lp trnh khc. Ta s s dng g++ dch cc chng trnh C++. g++ foo.cpp bin dch foo.cpp cho kt qu l file chy c a.out g++ -o foo foo.cpp bin dch foo.cpp cho kt qu l file chy c foo
2

@ 2004 Trn Minh Chu. FOTECH. VNU

Bin dch ring r


n n

VD: bin dch chng trnh program.cpp trong s dng mt lp c tn Picture thao tc cc hnh v Nn lu phn ci t ca lp Picture trong mt file ring, chng hn picture.cpp, :

to thun li cho vic s dng lp ny trong mt ng dng khc hai lp trnh vin c th d dng cng lm vic: mt ngi ci t lp Picture, ngi kia vit chng trnh chnh program.cpp khi chng trnh thay i, ch cn dch li file program.cpp, nh vy, qu trnh bin dch nhanh hn. i vi cc chng trnh ln, iu ny to s khc bit rt ln.

Ch : Theo thng l, cc file chng trnh C++ thng c kiu m rng ".cpp", ".cc", ".C", hoc ".cxx".

@ 2004 Trn Minh Chu. FOTECH. VNU

File header ca lp: ".h"


n

Nu ta khng mun ngi vit program.cpp bit chi tit ca lp Picture (v c th l b mt thng mi), ta cn tch giao din ca lp (phn khai bo) ra khi ci t ca lp. Mt khc, c th bin dch c, chng trnh chnh program.cpp cng cn bit v nh ngha ca lp Picture v cc phng thc ca lp . Gii php l m t lp Picture ti hai file

picture.h picture.cpp

cc nh ngha v khai bo (giao din) ci t

@ 2004 Trn Minh Chu. FOTECH. VNU

File header ca lp: ".h"


File cha ci t /* picture.h */ class Picture { //... Picture* frame(const Picture&); } /* picture.cpp */ #include "picture.h" Picture* Picture::frame (const Picture& x) { //m ng khung mt hnh nh }

File header cha giao din

/* program.cpp */ #include "picture.h" int main() { //thao tc cc hnh nh } Client/user

@ 2004 Trn Minh Chu. FOTECH. VNU

File header ca lp: ".h"


Nh vy, ta c th vit nhiu chng trnh s dng lp Picture c sn mt cch tin li

@ 2004 Trn Minh Chu. FOTECH. VNU

Bin dch ring r


n

bin dch chng trnh nh sau:


1> g++ -c picture.cpp 2> g++ -c program.cpp 3> g++ -o program program.o picture.o kha chuyn c ti dng 1 v 2 to cc object file program.o v picture.o. Dng 3 to file chy c c tn program vi kha chuyn o bng cch lin kt cc object file vi nhau.

Hoc
1> g++ -c picture.cpp 2> g++ -o program program.cpp picture.o

Nu program.cpp b thay i nhng Picture vn gi nguyn, th khi bin dch li, dng 1 l khng cn thit.

@ 2004 Trn Minh Chu. FOTECH. VNU

Lin kt object file

File thc thi

File m ngun

File object

@ 2004 Trn Minh Chu. FOTECH. VNU

Cc nh hng tin x l
n n n n n

Cc nh hng tin x l l cc lnh c tnh nng c bit c thc hin bi trnh tin x l trc khi m ngun c bin dch. Trong C++, cc nh hng tin x l bt u bng mt du # #include #define, #ifndef, #endif

@ 2004 Trn Minh Chu. FOTECH. VNU

nh hng tin x l #include


n

nh hng #include c ni dung ca file c nu tn vo ni t nh hng


#include <standard_file.h> #include "my_file.h"

n n

Cp ngoc nhn < > dng cho cc file header chun c tm kim trong cc th mc th vin chun. Cp du nhy dng cho cc file header ca ngi dng, s c tm kim trc ht trong th mc hin ti.
C th dng kho chuyn I (g++ -I) thay i ng dn tm kim. V d: g++ program.cpp I/home/tmct/my_include/

trong , /home/tmct/my_include/ l ng dn y n cc th mc cha cc file .h cn tm

@ 2004 Trn Minh Chu. FOTECH. VNU

10

Cc th vin
n

n n

to mt file thc thi (executable file), trnh lin kt (linker) cn kt ni m ca cc hm c khai bo trong cc file header chun C++ (iostream.h, string.h, v.v..) Cc on m tng ng c th c tm thy trong cc th vin chun C++ Mt th vin l mt tp hp cc object file. Trnh lin kt la chn m object t cc th vin cha nh ngha cc hm c s dng trong cc file chng trnh v kt ni chng vo file thc thi (executable file). Mt s th vin c trnh lin kt C++ t ng s dng, chng hn th vin chun C++. Cc th vin khc phi c ch r trong qu trnh lin kt bng kho chuyn l. V d, trong mt s mi trng lp trnh, cn lnh sau lin kt vi th vin ton hc chun libm.a
g++ -o myprog myprog.o lm

@ 2004 Trn Minh Chu. FOTECH. VNU

11

#define, #ifdef, #ifndef, #endif


n

#define

nh ngha mt nh danh

#define MAX 100 // t y, MAX s c gi tr 100 #define DEBUG // nh ngha DEBUG

#ifdef

nh hng iu kin "nu nh ngha" (if defined)


// nu DEBUG c nh ngha

#ifdef DEBUG

#ifndef defined)

nh hng iu kin "nu cha nh ngha" (if not

#ifndef DEBUG // nu DEBUG cha c nh ngha

#endif gn nht

kt thc khi m u bng #ifndef hoc #ifdef

nu iu kin ti nh hng m u khi tha mn th bin dch on lnh nm trong khi


12

@ 2004 Trn Minh Chu. FOTECH. VNU

#define, #ifdef, #ifndef, #endif


n

V d s dng
DEBUG c nh ngha, on trnh c bin dch ... #define DEBUG ... #ifdef DEBUG std::cerr << "Debug info: "; ... #endif ...

DEBUG khng c nh ngha, on trnh b b qua

... //#define DEBUG ... #ifdef DEBUG std::cerr << "Debug info: "; ... #endif ...
13

@ 2004 Trn Minh Chu. FOTECH. VNU

#define, #ifdef, #ifndef, #endif


/* program.h */ #include "b.h" #include "c.h" n /* b.h */ #include "a.h" #include "d.h" /* c.h */ #include "a.h" #include "e.h"

Do cc nh hng #include c th lng nhau, mt file header c th c kt ni hai ln. Hu qu l


file c x l nhiu ln tn thi gian, cc hng, macro, kiu d liu, nguyn mu hm c khai bo nhiu ln li bin dch.

Do vy, ta cn cc nh hng iu kin (conditional directive) trong mi file header


#ifndef PICTURE_H #define PICTURE_H // cc khai bo i tng, nh ngha lp, hm #endif //PICTURE_H

@ 2004 Trn Minh Chu. FOTECH. VNU

14

You might also like