Ifndef Là Gì

     

sát bên các trường đoản cú khoá hay dùng, C/C++ có một số lệnh tiền xử lí, gần như lệnh này không khi nào được biên dịch thành bất kể dòng lệnh làm sao trong mã thực thi. Cố vào đó nó có ảnh hưởng đến các khía cạnh của quá trình biên dịch. Ví dụ, ta có thể dùng hướng dẫn tiền cập nhật để ngăn trình biên dịch biên dịch một phần đoạn mã làm sao đó. Chỉ thị tiền cập nhật được phân biệt bằng cách bước đầu với lốt #. Thông tư tiền xử lý chưa hẳn là lệnh C/C++ vị vậy không tồn tại dấu “;” lúc kết thúc. Nội dung bài viết này sẽ giúp đỡ bạn nắm rõ hơn vụ việc này.

Bạn đang xem: Ifndef là gì

Chỉ thị tiền cách xử trí (preprocessor directives)

chỉ thị tiền xử lý là đa số chỉ thị cung ứng cho trình biên dịch để cách xử trí những thông tin trước khi ban đầu quá trình biên dịch. Tất cả các thông tư tiền giải pháp xử lý đều bước đầu với với # và các chỉ thị chi phí xử lý không phải là lệnh C/C++ vị vậy không tồn tại dấu ; khi kết thúc. Để mang lại dễ chúng ta chia thành 3 nhóm thiết yếu đó là:

Chỉ thị khái quát tệp (#include).Chỉ thị định nghĩa cho tên (#define macro).Chỉ thị biên dịch có điều kiện (#if, #else, #elif, #endif, …).
Chỉ thị bao gồm tệp (#include)

Ở nhóm này chỉ bao gồm một chỉ thị đó là #include.

Đây là thông tư cho phép chúng ta include một file khác vào file chúng ta đang viết.

Cú pháp 1:

#include

cùng với cú pháp 1, bộ tiền giải pháp xử lý sẽ tìm file_name có sẵn vào IDE(như Visual Studio) của bạn và chèn vào file mà bọn họ đang viết, nếu tìm ko thấy file_name thì trình biên dịch đã báo lỗi. Những file bao gồm sẵn trong IDE như stdio.h, math.h, conio.h, ….

Ví dụ:

#include

Cú pháp 2:

#include “file_name”

Khi sử dụng cú pháp 2, bộ tiền xử trí sẽ tìm file_name trong những thư mục trên máy tính xách tay của bọn chúng ta, khi tìm không thấy thì tiếp tục tìm trong các file gồm sẵn vào IDE. Ví như tìm được file_name thì chèn file_name vào file đang thao tác, còn vẫn không tìm kiếm thấy file_name thì trình biên dịch đang báo lỗi.

Ví dụ:

#include “GPIO.h”

Để phát âm bạn tưởng tượng rõ rộng về cơ chế hoạt động của chỉ thị #include thì bạn theo dõi lấy ví dụ như sau đây.

Tôi tất cả file GPIO.h có nội dung như sau:

struct PORT

int Pin;

boolean State;

;

Trong file main.cpp tôi ao ước sử dụng struct PORT thì tôi phải #include “GPIO.h”.

//main.cpp

#include “GPIO.h”

int main()

struct PORT 1;

return 0;

Việc #include “GPIO.h” giống như câu hỏi chép toàn bộ các đoạn code vào file GPIO.h vào file main.cpp.

struct PORT

int Pin;

boolean State;

;

int main()

struct PORT 1;

return 0;

Chỉ thị định nghĩa mang đến tên (#define macro) 

Ở đội này gồm các chỉ thị #define, #undef.

thông tư #define

Chỉ thị #define không bao gồm đối số.

Cú pháp:

#define identifier replacement-list

chỉ thị này có chức năng thay nuốm tên (identifier) bởi một dãy kí từ bỏ sau nó, khi dãy kí tự thay thế sửa chữa quá dài và sang dòng new thì rất có thể sử dụng dấu  vào cuối mẫu trước.

Ví dụ:

#define sunriverhoteldn.com.vn “sunriverhoteldn.com.vn” // định nghĩa đến sunriverhoteldn.com.vn

trong hàm main ta thực hiện lệnh sau:

printf(sunriverhoteldn.com.vn); // tương tự với lệnh printf(“sunriverhoteldn.com.vn”);

Phạm vi của tên được quan niệm bởi #define là cơ hội từ khi nó được định nghĩa cho đến cuối tệp.

có thể dùng #define định nghĩa như tên hàm, một biểu thức, một quãng chương trình bởi một tên, với cách thực hiện này thì công tác của chúng ta sẽ gọn ghẽ và dễ dàng nắm bắt hơn.

Ví dụ:

#define output printf(“sunriverhoteldn.com.vn”);

vào hàm main tôi thực hiện câu lệnh sau:

output; // printf(“sunriverhoteldn.com.vn”);

đầy đủ điểm cần chú ý của chỉ thị #define cho cách sử dụng trên:

Khi định nghĩa một biểu thức ta nên đặt nó vào trong cặp dấu ngoặc tròn.

Ví dụ:

#define SUM 5+8

khi ta gán size = SUM không xảy ra vấn đề gì dẫu vậy khi gán size = 5*SUM thì tương tự với size = 5*5+8 chứ không phải là size = 5*(5+8) như ta muốn muốn. Vì thế nên ta dùng #define SUM(5+8)sẽ luôn luôn đúng trong phần lớn trường hợp.

Khi quan niệm đoạn chương trình gồm nhiều câu lệnh thì ta nên được sắp xếp trong cặp ngoặc  và .

Ví dụ:

#define HELLO printf(“Hello sunriverhoteldn.com.vn ”); printf(“sunriverhoteldn.com.vn”);

void main()

bool x = true;

if(x) HELLO;

Đoạn lịch trình trên lúc biên dịch vẫn theo như mong muốn của ta là khi x = true in ra màn hình:

Hello sunriverhoteldn.com.vn

sunriverhoteldn.com.vn

khi gán x = false thì ko in ra màn hình.

Xem thêm: Question: The Singer Was ______ On The Piano By Her Sister On The Piano?

cơ mà khi ta vứt ngoặc  và  thì đoạn code vẫn như sau:

#define HELLO printf(“Hello sunriverhoteldn.com.vn ”); printf(“sunriverhoteldn.com.vn”);

Thì ngay cả khi x = false thì vẫn in ra màn hình:

sunriverhoteldn.com.vn

Chỉ thị #define có đối số.

ko kể cách sử dụng #define như trên, chúng ta còn rất có thể dùng #define để có mang các macro có đối giống như hàm. Để rõ hơn vậy thì bạn quan sát và theo dõi ví dụ khái niệm một macro tính tổng của 2 giá chỉ trị.

#define SUM(x,y) (x)+(y)

khi ấy câu lệnh

int z = SUM(x*2, y*3);

Được gắng bằng

int z = (x*2) + (y*3);

các điểm đề nghị lưu ý:

Giữa macro cùng dấu ( không được tồn tại khoảng tầm trắng.Để tránh khủng hoảng không mong ước thì lúc viết các biểu thức định nghĩa mang lại macro, các đối tượng vẻ ngoài (như x cùng y sinh hoạt ví dụ trên) thì nên cần có cặp ngoặc ( và ) bao quanh. Để minh họa cho vấn đề đó thì ta mang lại với ví dụ như sau:

#define MUL(x,y) x*y

void main()

printf(“%d”, MUL(5+3, 10));

Khi kia trình biên dịch thay MUL(5+3, 10) bằng 5+3*10 và ta thừa nhận đáp án 35 thay vì 80 như ta mong mỏi muốn.

Chỉ thị #undef

Cú pháp:

#undef identifier 

lúc ta cần định nghĩa lại một tên mà ta đã quan niệm trước đó thì ta sử dụng #undef để hủy bỏ định nghĩa đó với sử dụng #define định nghĩa lại cho tên đó.

Ví dụ:

#define sunriverhoteldn.com.vn “Hello sunriverhoteldn.com.vn ” // Định nghĩa mang đến tên sunriverhoteldn.com.vn là “Hello sunriverhoteldn.com.vn “

#undef sunriverhoteldn.com.vn // Hủy vứt định nghĩa cho tên sunriverhoteldn.com.vn

#define sunriverhoteldn.com.vn “Welcome lớn sunriverhoteldn.com.vn ” // Định nghĩa lại mang lại tên sunriverhoteldn.com.vn là “Welcome to lớn sunriverhoteldn.com.vn “

Chỉ thị biên dịch có điều kiện

Ở đội này gồm những chỉ thị #if, #elif, #else, #ifdef, #ifndef.

các chỉ thị #if, #elif, #else.

Cú pháp:

#if constant-expression_1

// Đoạn lịch trình 1

#elif constant-expression_2

// Đoạn chương trình 2

#else

//Đoạn chương trình 3

#endif

Nếu constant-expression_1 true thì chỉ có đoạn công tác 1 sẽ được biên dịch, trái lại nếu constant-expression_1 false thì sẽ liên tục kiểm ta đến constan-expression_2. Nếu vẫn không đúng thì đoạn lịch trình trong chỉ thị #else được biên dịch .

Các constant-expression là biểu thức mà các toán hạng trong những số ấy đều là hằng, các tên đã có được định nghĩa vì chưng các #define cũng được xem là các hằng.

các chỉ thị #ifdef, #ifndef.

Một biện pháp biên dịch có đk khác đó là sử dụng #ifdef và #ifndef, được đọc như là Nếu vẫn định nghĩa và Nếu không được định nghĩa.

Chỉ thị #ifdef.

#ifdef identifier

//Đoạn lịch trình 1

#else

//Đoạn công tác 2

#endif

Nếu indentifier đã được định nghĩa thì đoạn công tác 1 sẽ được thực hiện. Ngược lại nếu indentifier chưa được quan niệm thì đoạn lịch trình 2 sẽ được thực hiện.

chỉ thị #indef

#ifndef identifier

//Đoạn lịch trình 1

#else

//Đoạn lịch trình 2

#endif

với chỉ thị #ifndef thì cách thức hoạt động ngược lại với #ifdef.

Ví dụ:

#ifdef MAX // ví như MAX đã có được định nghĩa

#undef MAX // Hủy vứt MAX

#define MAX 100 // Định nghĩa lại MAX

#else // nếu như MAX chưa được đinh nghĩa

#define MAX 1 // Định nghĩa MAX

#endif

các chỉ thị điều kiện ở trên, thường được sử dụng cho bài toán xử lý xung bỗng thư viện khi bọn chúng ta #include nhiều tủ sách như sinh sống ví dụ bên dưới đây:

Tôi gồm một file A.h.

//file A.h

Source code B

Tôi cũng có thể có các file B.h và C.h và 2 tệp tin này đều bắt buộc nội dung của file A.h, chính vì vậy tôi #include “A.h” vào file B.h và C.h.

//file B.h

#include”A.h”

Source code B

//file C.h

#include”A.h”

Source code C

tệp tin main.cpp của tôi #include “B.h” và #include “C.h”, khi đó nội dụng file main.cpp trở thành.

//file main.cpp

#include”B.h”

#include”C.h”

Source code tệp tin main

chúng ta cũng có thể hình dung file main.cpp như sau:

//file main.cpp

//#inlude”B.h”

Source code A

Source code B

//#include”C.h”

Source code A

Source code C

Source code file main

Như ta thấy câu chữ file A.h sẽ được chép 2 lần sang file main.cpp, bởi vì khi ta #include “B.h” thì câu chữ file B.h(có cả câu chữ file A.h) đã được chép sang file main.cpp. Ta tiếp tục #include “C.h” thì văn bản file C.h (có cả văn bản file A.h) đã có được chép sang trọng file main.cpp. Vị thế, câu chữ của file A.h được chép gấp đôi trong file main.cpp và khi ta biên dịch thì trình biên dịch sẽ báo lỗi. Để hạn chế và khắc phục lỗi này thì tôi sử dụng chỉ thị #ifndef, #define vào trong file A.h.

Xem thêm: Cập Nhật Client Alpha Lol Là Gì, Giai Đoạn Thử Nghiệm Alpha Sắp Hoàn Tất

#ifndef __A_H__

#define __A_H__

Source code A

#endif // __AH__

lúc ấy nội dung file main.cpp chúng ta hoàn toàn có thể hình dung là:

//file main.cpp

//#include”B.h”

#ifndef __A_H__

#define __A_H__

Source code A

#endif // __AH__

Source code B

//#include”C.h”

#ifndef __A_H__

#define __A_H__

Source code A

#endif // __AH__

Source code C

Source code file main

chế độ hoạt động:

Từ chiếc 4-9: __A_H__ chưa được có mang nên được cho phép chép nội dung file A.h vào main.cpp.Dòng 11: câu chữ file B.h.Từ chiếc 14-19: Ở trên __A_H__ đã được định nghĩa đề nghị không cho phép chép nội dung file A.h vào main.cpp.Dòng 21: câu chữ file C.h.

Nguồn sưu tầm: Stdio