Mam następujący kod, który skompilować z gcc
#define i #include zamówienie w C
#include<stdio.h>
#include<stdbool.h>
#define true 9
int main() {
printf("TRUE = %d\n",true);
return 0;
}
i dostaję błąd
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
Ale kiedy zmienić kod trochę
#include<stdio.h>
#define true 9
#include<stdbool.h>
int main() {
printf("TRUE = %d\n",true);
return 0;
}
Wyjście:
TRUE = 1
Pytanie:
rozumiem przyczynę błędu w pierwszym przypadku, lecz w drugim przypadku, gdy określenie true
zanim #include<stdbool.h>
, dlaczego jest możliwość przedefiniowania true
?
Aktualizacja:
Oto stdbool.h.
pierwszych kilku liniach są
#ifndef _STDBOOL_H
#define _STDBOOL_H
#ifndef __cplusplus
#define bool _Bool
#define true 1
#define false 0
który ma jak w Yu Hao „s answer.
Mam nadzieję, że nie myślisz poważnie o zdefiniowaniu prawdziwej – Bathsheba
@Bathsheba Myślę, że OP robi test, więc potrzebuje innej wartości niż '1', aby zobaczyć, które makro działa. –