Articles of compiler construction

La statement de impresión no se imprimirá antes de un bucle infinito

Al intentar depurar algún código C, noté que un printf () no se ejecutará si se coloca antes de un bucle infinito. ¿Alguien sabe a que se debe esto? Prácticamente no es un gran problema, pero para la depuración es una pesadilla. #include int main() { int data; printf(“This prints fine.\n”); printf(“Enter data: “); scanf(“%d”, […]

Sin alineación de memoria con GCC

Estoy trabajando con algunos datos de paquetes. He creado estructuras para contener los datos del paquete. Python ha generado estas estructuras para un protocolo de red específico. El problema es que debido al hecho de que el comstackdor alinea las estructuras, cuando envío los datos a través del protocolo de red, el mensaje termina siendo […]

Referencia indefinida a fork () en Code :: Blocks editor en Windows OS

Cuando estoy ejecutando debajo del código en Code :: Blocks en el sistema operativo Windows. Solía ​​obtener un error llamado referencia indefinida a fork (). Definí / elegí el comstackdor GCC como mi comstackdor por defecto. #include #include void main() { int x; x = 0; fork(); x = 1; … …. } Por favor, […]

¿Por qué no es seguro -freciprocal-math en GCC?

-freciprocal-math en GCC cambia el siguiente código double a = b / c; a double tmp = 1/c; double a = b * tmp; En el manual de GCC, se dice que tal optimización no es segura y no se adhiere a los estándares IEEE. Pero no puedo pensar en un ejemplo. ¿Podrías dar un […]

¿Las variables de condición de bucle infinito deberían declararse siempre como volátiles?

Considere, este tipo de código, while( !cond ) ; Si cond no se declara volátil, el comstackdor puede optimizarlo almacenándolo en un registro. En ese caso, el bucle while continuará incluso después de que se establezca cond . Ahora, ¿eso significa que cualquier tipo de variable debe declararse siempre volátil ? ¿Por qué los comstackdores […]

Libclang API para obtener definiciones de funciones definidas en un archivo diferente

Supongamos que tengo dos archivos main.c y func.c func.c se llama desde main.c’s function. Normalmente, generaría main.o y func.o, y el enlazador encontraría la definición de func y lo vincularía a su llamada en main .c Ahora, quiero hacer lo mismo a través de las API de libclang. Esto es para una utilidad de navegación […]

¿Hay alguna forma de determinar el espacio de stack disponible en el tiempo de ejecución?

Sé que el tamaño de la stack es fijo. Por lo tanto, no podemos almacenar objetos grandes en la stack y cambiamos a asignaciones dinámicas (por ejemplo, malloc). Además, la stack se usa cuando hay un agrupamiento de llamadas de función, por lo que también evitamos las funciones recursivas por este motivo. ¿Hay alguna manera […]

¿El comstackdor optimizará los argumentos no utilizados de la función estática?

Tengo un grupo de funciones que están declaradas como static y fastcall . La mayoría de ellos hace uso de un puntero a una estructura que sirve más o menos el papel de this en C ++. Algunas de las funciones no necesitan nada en la estructura, pero por uniformidad quiero pasarles el puntero de […]

Compile y ejecute un archivo.c utilizando el comstackdor Tiny C en Windows

¿Puedo obtener un paso a paso sobre cómo comstackr mi archivo.c usando el comstackdor Tiny C y el indicador de Windows? Algunas preguntas que ya tengo: ¿Dónde guardo todos los archivos TCC de la descarga? ¿Tengo que comstackr stdio.h para usar la función printf? (Me gustaría hacer un ‘Hola Mundo’). Así es como se ve […]

LLVM – Ejecutar pase propio automáticamente con clang

Escribí algunos pases propios para llvm, para usarlos con clang. Los integré en llvm (no cargados dinámicamente). Incluso se enumeran en la sección Optimizaciones disponibles: cuando escribo: opt –help-hidden Quiero ejecutar uno de mis pases propios ahora automáticamente como el último cuando llamo a clang: clang ./hello.bc -o ./hello o incluso con c-code: clang ./hello.c […]