#define one 0
#ifdef one
printf("one is defined ");
#ifndef one
printf("one is not defined ");
Đây là vai trò của #ifdef
và #ifndef
và đầu ra là gì?Vai trò của #ifdef và #ifndef
#define one 0
#ifdef one
printf("one is defined ");
#ifndef one
printf("one is not defined ");
Đây là vai trò của #ifdef
và #ifndef
và đầu ra là gì?Vai trò của #ifdef và #ifndef
Văn bản bên trong một số ifdef/endif
hoặc ifndef/endif
pair sẽ bị bỏ lại hoặc xóa bởi bộ xử lý trước tùy thuộc vào điều kiện. ifdef
có nghĩa là "nếu sau đây được xác định" trong khi ifndef
có nghĩa là "nếu sau đây là không phải là được xác định".
Vì vậy:
#define one 0
#ifdef one
printf("one is defined ");
#endif
#ifndef one
printf("one is not defined ");
#endif
tương đương với:
printf("one is defined ");
từ one
được định nghĩa như vậy ifdef
là đúng và ifndef
là sai. Bất kể nó được định nghĩa là gì là. Một đoạn mã tương tự (tốt hơn trong quan điểm của tôi) về điều đó sẽ là:
#define one 0
#ifdef one
printf("one is defined ");
#else
printf("one is not defined ");
#endif
vì điều đó chỉ rõ mục đích rõ ràng hơn trong tình huống cụ thể này.
Trong trường hợp cụ thể của bạn, văn bản sau ifdef
không bị xóa vì one
được xác định. Văn bản sau khi ifndef
bị xóa vì cùng một lý do. Sẽ cần phải có hai đóng endif
dòng tại một số điểm và là người đầu tiên sẽ gây ra dòng để bắt đầu bị bao gồm một lần nữa, như sau:
#define one 0
+--- #ifdef one
| printf("one is defined "); // Everything in here is included.
| +- #ifndef one
| | printf("one is not defined "); // Everything in here is excluded.
| | :
| +- #endif
| : // Everything in here is included again.
+--- #endif
người nên đề cập đến rằng trong câu hỏi có một cái bẫy nhỏ. #ifdef
sẽ chỉ kiểm tra nếu biểu tượng sau đã được xác định thông qua #define
hoặc theo dòng lệnh, nhưng giá trị của nó (sự thay thế của nó trong thực tế) là không liên quan. Thậm chí bạn có thể viết
#define one
trình biên dịch trước chấp nhận điều đó. Nhưng nếu bạn sử dụng #if
thì đó là một điều khác.
#define one 0
#if one
printf("one evaluates to a truth ");
#endif
#if !one
printf("one does not evaluate to truth ");
#endif
sẽ cấp one does not evaluate to truth
. Từ khóa defined
cho phép nhận được hành vi mong muốn.
#if defined(one)
Do đó, tương đương với #ifdef
Ưu điểm của #if
xây dựng là để cho phép một xử lý tốt hơn các đường dẫn mã, cố gắng làm một cái gì đó như thế với cái cũ #ifdef
/#ifndef
cặp.
#if defined(ORA_PROC) || defined(__GNUC) && __GNUC_VERSION > 300
"#if one" có nghĩa là nếu "#define one" được viết "#if one" được thực thi nếu không "#ifndef one" được thực hiện.
Đây chỉ là Chỉ thị tiền xử lý trước (CPP) tương đương với câu lệnh chi nhánh nếu, sau đó, khác trong ngôn ngữ C.
tức là nếu {#define one} rồi printf ("một đánh giá thành sự thật"); else printf ("không xác định"); vì vậy nếu không có #define một câu lệnh thì nhánh khác của câu lệnh sẽ được thực hiện.
Tôi không chắc chắn điều này cho biết thêm rằng các câu trả lời khác chưa bao gồm và ví dụ của bạn không phải là C hoặc C++. – SirGuy