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