Tôi đã mã sau đây mà tôi biên dịch với gcc
#define và trật tự #include trong C
#include<stdio.h>
#include<stdbool.h>
#define true 9
int main() {
printf("TRUE = %d\n",true);
return 0;
}
Và tôi nhận được Lỗi
test.c:3:0: warning: "true" redefined [enabled by default]
In file included from test.c:2:0:
/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdbool.h:34:0: note: this is the location of the previous definition
Nhưng khi tôi thay đổi mã một chút
#include<stdio.h>
#define true 9
#include<stdbool.h>
int main() {
printf("TRUE = %d\n",true);
return 0;
}
Đầu ra:
TRUE = 1
Câu hỏi:
Tôi hiểu lý do lỗi trong trường hợp đầu tiên nhưng trong trường hợp thứ hai khi tôi xác định true
trước khi tôi #include<stdbool.h>
, tại sao là nó cho phép để xác định lại true
?
Cập nhật:
Đây là stdbool.h.
vài dòng đầu tiên là
#ifndef _STDBOOL_H
#define _STDBOOL_H
#ifndef __cplusplus
#define bool _Bool
#define true 1
#define false 0
đó là gì, như thế nào trong 's answer Yu Hao.
Tôi hy vọng bạn không nghiêm túc suy nghĩ về việc xác định đúng – Bathsheba
@Bathsheba Tôi nghĩ rằng OP đang thực hiện thử nghiệm, vì vậy, anh ta cần giá trị khác với '1' để xem macro nào đang hoạt động. –