C code: char string [ 5 ] ;
Cách xác định đơn giản Ta cũng có thể đơn giản viết:
Ta cũng có thể đơn giản viết: Code C:
#define CONSTANT
…mà không cần biết giá trị của nó
Điều này có tác dụng báo cho preprocessor biết rằng từ CONSTANT đã được xác định, nó không có giá trị, nhưng nó « tồn tại ».
Thật sự tôi không hứng thú lắm về nó, tác dụng của nó là gì vậy?
Có lẽ bạn vẫn chưa thấy rõ tác dụng của nó, tôi sẽ chỉ ra cho bạn ở phần sau đây.
Macros
Chúng ta đã thấy rằng với các #define chúng ta có thể yêu cầu preprocessor thay thế một từ khóa bằng một giá trị.
Lấy ví dụ: Code C:
#define SOLUONG 9
... có nghĩa rằng tất cả những từ « SOLUONG » trong code của bạn sẽ được thay thế bằng giá trị 9. Chúng ta thấy rằng nó cũng tương tự như chức năng find / replace trong Microsoft Word, trong trường hợp này thì nó được thực hiện bởi preprocessor trước khi compilation.
Tôi có một thông tin mới cho bạn!
Thực tế #define có tác dụng mạnh hơn rất nhiều, nó cho phép thay thế cả… một đoạn code! Khi ta sử dụng #define để find / replace một từ bằng một đoạn code, chúng ta gọi đó là macro. Macro không dùng tham số (parameters)
Đây là một ví dụ của macro đơn giản: Code C:
#define CUCKOO( ) printf ("Cuckoo");
Điều thay đổi ở đây, là những dầu ngoặc ( ) được thêm vào sau từ khóa (ở đây là từ CUCKOO). Chúng ta sẽ xem ngay đây tác dụng của nó.
Test macro trong code source:
C Code:
#define CUCKOO( ) printf ("Cuckoo") ;
int main (int argc, char *argv[ ]) { CUCKOO( ) return 0 ; } Console: Cuckoo
Tôi đồng ý với bạn, rằng đây không phải cách truyền thống mà chúng ta đã được học ở các bài trước.
Điều bạn cần phải biết đó là, macro sẽ được trực tiếp thay thế lại trong code source trước khi compile.
Đoạn code trên sẽ tương tự như đoạn code sau đây trong thời điểm compilation.
C Code:
int main (int argc, char *argv[ ]) {
printf ("Cuckoo");
return 0;
}
Nếu bạn đã hiểu 2 đoạn code ở trên, bạn hầu như đã nắm bắt được nền tảng của các macro.
Nhưng… chúng ta chỉ có thể đặt duy nhất một đoạn code trong mỗi macro thôi sao?
Không, thật may mắn là chúng ta có thể đặt nhiều dòng code trong mỗi macro. Chỉ cần đặt một kí tự \ trước mỗi dòng mới, tương tự như sau:
C Code:
#define GIOI_THIEU_BAN_THAN( )printf ("Xin chao, toi ten la Minh\n"); \
printf ("Toi song tai thanh pho HCM\n"); \
printf ("Toi thich nghe nhac\n");
int main (int argc, char *argv[ ]) {
GIOI_THIEU_BAN_THAN( )
return 0;
}
Console:
Xin chao, toi ten la Minh Toi song tai thanh pho HCM Toi thich nghe nhac
Cần lưu ý là trong main, khi gọi một macro chúng ta không đặt dấu chấm phẩy « ; » ở cuối dòng. Thực tế, đây là một dòng cho preprocessor, chúng ta không cần thiết phải kết thúc bằng dấu chấm phẩy.