| | Các preprocessor directive, xây dựng file header, Macro, và tổ chức chương trình C | |
| Tác giả | Thông điệp |
---|
hieutin4 Tập bò
Tổng số bài gửi : 4 Điểm_Cấp_Bậc : 13 Cấp bậc : 1 Join date : 06/04/2010
| Tiêu đề: Các preprocessor directive, xây dựng file header, Macro, và tổ chức chương trình C Tue Apr 06, 2010 6:25 pm | |
| Nếu bạn không có làm việc với nhiều người, bạn không xây dựng các chương trình C/C++ gồm nhiều người, không xây dựng các chương trình C/C++ bởi nhiều modulus, nhiều file ghép lại. thì có lẽ điều sau đây, bạn chưa cần quan tâm lắm.
Để chúng ta có thể xây dựng lên một chương trình C/C++ lớn, bao gồm nhiều người cùng xây dựng, ... Những vấn đề sau, có lẽ sẽ là những vấn đề cần quan tâm tới
Trong C/C++, dấu thăng (#) được gọi là Preprocessor operator (Tạm dịch để hiểu là: Toán tử tiền xử lý)
Preprocessor directives gồm có: (Việt Nam thường được gọi là: Các chỉ thị tiền xử lý)
Code: # (null directive) #ifdef #define #ifndef #elif #include #else #line #endif #if #error #undef #pragmaVà một vài directive ở VC++ nữa là: #using, #import
Các bài sau, Dr sẽ giới thiệu sơ sơ về cách sử dụng Preprocessor directive, và ứng dụng cụ cụ thể như thế nào. OK? #include
Đây là chỉ thị bao gộp. Thông thường khi bắt đầu học C/C++ bạn cũng đã biết đến directive này, với ý nghĩa bao gộp một tệp nào đó.
C code:Lựa chọn code | Ẩn/Hiện code Syntax (Cú pháp): #include <header_name> #include "header_name" #include macro_identifierVí dụ 1: C code:Lựa chọn code | Ẩn/Hiện code #include <stdio.h> #include <iostream>Ví dụ 2: C code:Lựa chọn code | Ẩn/Hiện code #include "MyConio.h" #include "MyConsoleIO"Ví dụ 3: C code:Lựa chọn code | Ẩn/Hiện code #define MyHeaderFile "D:\BORLANDC\MYFOLDER\MyConio.H" /*OK */ #include MyHeaderFileVề cơ bản #include directive dùng để bao gộp một file code nào đó. Trước khi biên dịch, Compiler sẽ tìm file này, sau đó chèn vào file nguồn tại vị trí đặt #include. Nếu không tìm thấy thì sẽ báo lỗi: Unable to open include file "header_name"
Các vấn đề khác về #include sẽ được nói đến ở một phần khác.
#define
Code: Syntax: #define macro_identifier <token_sequence>#define directive định nghĩa một macro. Macro cung cấp cho ta một kỹ thuật thay thế có hoặc không có 'bộ' chính thức, thay thế giống các tham số của hàm.
Nguyên bản: The #define directive defines a macro. Macros provide a mechanism for token replacement with or without a set of formal, function-like parameters.
Một token_sequence rỗng sẽ cho kết quả là macro identifier sẽ không được sử dụng trong mã nguồn.
Ví dụ: C code:Lựa chọn code | Ẩn/Hiện code #define Hi "Have a nice day!" // Thay thế chuỗi "Have a nice day!" bởi macro Hi
#define STDIO #include<stdio.h> //Chú ý: Không được có khoảng trắng giữa các macro. Định nghĩa: #define STD IO #include<stdio.h> là không được như muốn
#define EMPTY // Nếu trong mã nguồn có EMPTY, nó sẽ không được sử dụng.
#define max(a,b) ((a)>(b)?(a):(b)) Trích dẫn: Chú ý: Không để các khoảng trắng như thế này max (a,b) để định nghĩa hàm max(a,b) như trên. Nên đưa vào cặp () trong biểu thức để macro sử dụng được an toàn. Đối của macro không khai báo kiểu, nên hàm macro được định nghĩa, có thể dùng với bất cứ kiểu dữ liệu nào
Một số tình huống với #define
Tình huống 1: C code:Lựa chọn code | Ẩn/Hiện code #define MAX 1000
printf("MAX"); // Sẽ in lên màn hình là MAX chứ không phải là 1000Tình huống 2: C code:Lựa chọn code | Ẩn/Hiện code #define product(x,y) x*y
product(5+6,10); //sẽ cho kết quả là 5+6*10=65 chứ không phải là 110.Định nghĩa một khối lệnh: Nghiên cứu thông qua ví dụ sau: C code:Lựa chọn code | Ẩn/Hiện code #define HelloWorld { clrscr(); printf("Hello world!"); printf("\nChao mung ban den voi cong dong C Viet"); }
//Cách sử dụng: int main() { HelloWorld return 0; }Hoặc ví dụ: C code:Lựa chọn code | Ẩn/Hiện code #define EXIT {printf("\The End"); exit(0);} // Tạo câu lệnh để thoát chương trìnhTình huống không tốt: Nếu bạn không có cặp dấu {} bọc các khối lệnh lại, sẽ gặp phải tình huống không như muốn. Ví dụ: C code:Lựa chọn code | Ẩn/Hiện code #define EXIT printf("\The End"); exit(0);
Sử sụng: if(a==0) EXIT // Sẽ không cho kết quả như mong muốn. a!=0 nó vẫn thoát chương trình. Câu lệnh trên sẽ hiểu là: if(a==0) printf("\The End"); exit(0);Để dễ hình dung, bạn cứ hình dung về #define directive như sau: #define A B // Thay thế B bởi A. Trong mã nguồn có A, thì compiler sẽ hiểu chỗ đó có nghĩa là B. A và B cách nhau bằng một khoảng trắng
#undef
Code: Syntax: #undef macro_identifierBạn có thể bỏ định nghĩa(undefine) một macro bằng sử dụng #undef directive. #undef bỏ đi bất cứ token_sequence trước đó từ macro_identifier; macro_definition đã bị quên, và macro_identifier là coi như chưa được định nghĩa. Không có macro_identifier mở rộng nào trong phạm vi của dòng chứa #undef.
Sau khi một macro_identifier đã được bỏ định nghĩa(undefined), nó có thể được định nghĩa lại với #define, sử dụng giống hoặc khác token_sequence.
Ví dụ: C code:Lựa chọn code | Ẩn/Hiện code #define BLOCK_SIZE 512 //Định nghĩa BLOCK_SIZE = 512 //Làm cái gì đó với BLOCK_SIZE đã được định nghĩa.
#undef BLOCK_SIZE
#define BLOCK_SIZE 256 //Định nghĩa lại BLOCK_SIZE, sau khi đã bỏ định nghĩa ở trên. Trích dẫn: Lưu ý:Các câu lệnh của preprocessor directive không có dấu kết thúc câu lệnh ( ; ) ở cuối
còn nữa các bạn tự ngiên cứu nhé __________________
__________________ |
| | | thangbomhu Tập bú sữa
Tổng số bài gửi : 1 Điểm_Cấp_Bậc : 1 Cấp bậc : 0 Join date : 12/04/2010 Age : 37 Đến từ : hai phong
| Tiêu đề: Re: Các preprocessor directive, xây dựng file header, Macro, và tổ chức chương trình C Mon Apr 12, 2010 7:10 pm | |
| |
| | | hungmittq Nghiên Cứu Sinh
Tổng số bài gửi : 43 Điểm_Cấp_Bậc : 76 Cấp bậc : 0 Join date : 05/04/2010 Age : 33 Đến từ : Tuyên Quang
| Tiêu đề: Re: Các preprocessor directive, xây dựng file header, Macro, và tổ chức chương trình C Tue Apr 13, 2010 4:10 pm | |
| Đúng là hiếu có khác. post bài nào anh em không hiểu bài đấy luôn, khó quá. |
| | | Admin Phó Giáo Sư
Tổng số bài gửi : 153 Điểm_Cấp_Bậc : 342 Cấp bậc : 16 Join date : 04/04/2010 Age : 34 Đến từ : Viet Nam
| Tiêu đề: Re: Các preprocessor directive, xây dựng file header, Macro, và tổ chức chương trình C Tue Apr 13, 2010 4:29 pm | |
| Thật khủng... Heheh... Phải Thanks Hùng mới được, heheh.. Lên 1 cấp đấy.... :ZH67G |
| | | phamxuantuong Kỹ Sư
Tổng số bài gửi : 56 Điểm_Cấp_Bậc : 98 Cấp bậc : 3 Join date : 09/04/2010 Age : 33 Đến từ : hải dương
| Tiêu đề: Re: Các preprocessor directive, xây dựng file header, Macro, và tổ chức chương trình C Fri Apr 16, 2010 4:38 pm | |
| |
| | | Sponsored content
| Tiêu đề: Re: Các preprocessor directive, xây dựng file header, Macro, và tổ chức chương trình C | |
| |
| | | | Các preprocessor directive, xây dựng file header, Macro, và tổ chức chương trình C | |
|
Trang 1 trong tổng số 1 trang | |
| Permissions in this forum: | Bạn không có quyền trả lời bài viết
| |
| |
| |