meaning for c++ c llvm llvm-clang

c++ - meaning - llvm for linux



¿Qué efecto tiene#define XX en C? (3)

Haría la diferencia de que verdadero, falso, etc. ahora son macros. Así que código como este

#if defined(true) ... #else ... #endif

se veria afectado

En el código fuente de stdbool.h en el proyecto LLVM, se lee:

/* Don''t define bool, true, and false in C++, except as a GNU extension. */ #ifndef __cplusplus #define bool _Bool #define true 1 #define false 0 #elif defined(__GNUC__) && !defined(__STRICT_ANSI__) /* Define _Bool, bool, false, true as a GNU extension. */ #define _Bool bool #define bool bool #define false false #define true true #endif

En las últimas 4 líneas hay tres líneas de #define XX . ¿Por qué harías eso? ¿Qué diferencia hace? ¿No obligaría a este compilador a simplemente reemplazar, digamos, true por true ?


La única razón por la que puedo pensar es que las declaraciones del preprocesador como

#ifdef bool // do some stuff or define bool #endif

en otros archivos c, después, funcionará correctamente y no intentar redefinir bool de otra manera como

#define bool int

Lo que interferiría con la primera definición.


#define X X

tiene el efecto de que "el condicional del preprocesador" * :

#ifdef X

es "verdadero" "tiene éxito". *

* actualizar