error: nombre de tipo desconocido ‘bool’

4 minutos de lectura

error nombre de tipo desconocido bool
meepo

Descargué el código fuente y quería compilar el archivo del escáner. Produce este error:

[meepo@localhost cs143-pp1]$ gcc -o lex.yy.o lex.yy.c -ll
In file included from scanner.l:15:0:
scanner.h:59:5: error: unknown type name ‘bool’
In file included from scanner.l:16:0:
utility.h:64:38: error: unknown type name ‘bool’
utility.h:74:1: error: unknown type name ‘bool’
In file included from scanner.l:17:0:
errors.h:16:18: fatal error: string: No such file or directory
compilation terminated.

Y traté de usar un compilador diferente para compilarlo, pero aparecieron diferentes errores.

[meepo@localhost cs143-pp1]$ g++ -o scan lex.yy.c -ll
/usr/bin/ld: cannot find -ll
collect2: ld returned 1 exit status

Mi sistema operativo es 3.0-ARCH, no sé por qué sucedió esto. ¿Cómo soluciono el error?

  • #include <stdbool.h>

    – leppie

    15 de noviembre de 2011 a las 7:54

error nombre de tipo desconocido bool
usuario978122

C90 no admite el tipo de datos booleano.

C99 lo incluye con esto incluye:

#include <stdbool.h>

  • C99 lo hace, si tienes #include <stdbool.h>.

    –Keith Thompson

    15 de noviembre de 2011 a las 8:37

  • C99 tiene un tipo booleano nativo llamado _Bool. los <stdbool.h> el encabezado proporciona un typedef para él llamado booljunto con true y false.

    –MM

    1 de abril de 2015 a las 3:59

  • ¿Cómo es que puedo compilar bien mis cosas bool en OSX sin incluir stdbool.h?

    – David 天宇 Wong

    17 de noviembre de 2018 a las 18:58

  • También copié y pegué un código “C” y, como respondí, tenía que incluir stbool.h, así que gcc compilado Sin embargo, parece que C ++ conoce los valores booleanos “listos para usar”, por lo que simplemente podría usar g++ para compilar sin cambios en el código. Entonces, dependiendo de su contexto, la fuente del código y otros errores, tal vez no esté mirando el código c sino c ++.

    – nuala

    26 sep 2019 a las 15:33


1647567308 578 error nombre de tipo desconocido bool
Tomás

C99 lo hace, si tienes

#include <stdbool.h> 

Si el compilador no es compatible con C99, puede definirlo usted mismo:

// file : myboolean.h
#ifndef MYBOOLEAN_H
#define MYBOOLEAN_H

#define false 0
#define true 1
typedef int bool; // or #define bool int

#endif

(pero tenga en cuenta que esta definición cambia ITB por bool escriba, de modo que se vincule con bibliotecas externas que se compilaron con definiciones correctamente definidas bool puede causar errores de tiempo de ejecución difíciles de diagnosticar).

  • Mi forma favorita de definir bool es: typedef enum { false, true } bool;

    –Keith Thompson

    17 de noviembre de 2011 a las 3:27

  • necesitas el typedef poder referirse al tipo como bool en vez de enum bool.

    –Keith Thompson

    17 de noviembre de 2011 a las 3:48

  • La última forma es inherentemente arriesgada porque no hay una conversión implícita. Por ejemplo, si tuviéramos entradas de 16 bits y long FLAG = 0x4000000; bool b = ( x & FLAG ); entonces esto provoca un comportamiento indefinido (con el resultado probable de que b parecerá ser falso incluso si x tenía la bandera puesta). Esto es más difícil de detectar cuando el bool es un parámetro de función. Úsalo, pero úsalo con cuidado.

    –MM

    1 de abril de 2015 a las 4:01


  • ¡Tener cuidado! Esta typedef no lo haré se comportan igual que un verdadero bool C99 en casos extremos, porque un verdadero bool C99 tiene solo dos valores pero esto typedef admite tantos como int lo hace, sino también porque C99 bool tiene reglas de lanzamiento especiales que el typedef no. Ejemplo: en C99, (bool)99999998430674944 es inequívocamente true. Con tu typedefcompilando en GCC en mi máquina, (bool)99999998430674944 es false (debido a cómo se maneja el desbordamiento al lanzar).

    –Mark Amery

    03/04/2016 a las 18:08


  • @KeithThompson Una definición como esta rompe ABI si intenta vincularse con una biblioteca externa que se compiló con bool normal.

    – yugr

    21 de abril de 2018 a las 19:04


error nombre de tipo desconocido bool
M.Hefny

Solo agrega lo siguiente:

#define __USE_C99_MATH

#include <stdbool.h>

  • Qué es __USE_C99_MATH?

    –Keith Thompson

    22 abr 2018 a las 20:37

En algún lugar de su código hay una línea #include <string>. Esto por sí mismo te dice que el programa está escrito en C++. entonces usando g++ es mejor que gcc.

Para la biblioteca que falta: debe buscar en el sistema de archivos si puede encontrar un archivo llamado libl.so. Utilizar el locate comando, prueba /usr/lib, /usr/local/lib, /opt/flex/libo usar la fuerza bruta find / | grep /libl.

Una vez que haya encontrado el archivo, debe agregar el directorio a la línea de comando del compilador, por ejemplo:

g++ -o scan lex.yy.c -L/opt/flex/lib -ll

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad