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.
E intenté usar un compilador diferente para compilarlo, pero aparecieron errores diferentes.
[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>Respuestas:
C90 no admite el tipo de datos booleanos.
C99 lo incluye con esto incluyen:
#include <stdbool.h>fuente
#include <stdbool.h>._Bool. El<stdbool.h>encabezado proporciona un typedef para su nombrebool, junto contrueyfalse.gcccompilado. Sin embargo, parece que C ++ conoce los valores booleanos "fuera de la caja", por lo que podría usarlos simplementeg++para compilar sin ningún cambio en el código. Entonces, dependiendo de su contexto, fuente de código y otros errores, tal vez no esté viendo el código c sino el código c ++.C99 lo hace, si tiene
#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 ABI para el
booltipo, por lo que la vinculación con bibliotecas externas que se compilaron con una definición adecuadaboolpuede causar errores de tiempo de ejecución difíciles de diagnosticar).fuente
booles:typedef enum { false, true } bool;typedefpoder hacer referencia al tipo como enboollugar deenum bool.long FLAG = 0x4000000; bool b = ( x & FLAG );luego esto causa un comportamiento indefinido (con el resultado probable quebparecerá falso incluso si sexhubiera establecido la bandera). Esto es más difícil de detectar cuandobooles un parámetro de función. Úselo, pero use con cuidado.typedefno se comportará de la misma manera que un bool C99 verdadero en casos extremos, tanto porque un bool C99 verdadero tiene solo dos valores, pero estotypedefadmite tantos como lointhace, pero también porque C99booltiene reglas de conversión especiales quetypedefno tiene. Ejemplo: en C99,(bool)99999998430674944es inequívocotrue. Con sutypedef, compilar en GCC en mi máquina,(bool)99999998430674944esfalse(debido a cómo se maneja el desbordamiento cuando se lanza).Solo agregue lo siguiente:
#define __USE_C99_MATH #include <stdbool.h>fuente
__USE_C99_MATH?En algún lugar de su código hay una línea
#include <string>. Esto por sí solo le dice que el programa está escrito en C ++. Entonces usarg++es mejor quegcc.Para la biblioteca que falta: debe buscar en el sistema de archivos si puede encontrar un archivo llamado
libl.so. Utilice ellocatecomando, tratar/usr/lib,/usr/local/lib,/opt/flex/lib, o utilizar la fuerza brutafind / | grep /libl.Una vez que haya encontrado el archivo, debe agregar el directorio a la línea de comandos del compilador, por ejemplo:
fuente