Problemas con las funciones printf y exit en Dev C++

Iniciado por kichan, 11 Mayo 2005, 01:33 AM

0 Miembros y 1 Visitante están viendo este tema.

kichan

Resulta que tengo un programita en C++, que quiero compilarlo con el Dev C++,
les incluyo las dos librerias
#include <windows.h>
#include <stdio.h>

sin embargo igual me aroja errores con la funcion printf y exit, no se por que se supone que la funcion printf esta declarada en stdio.h  .me dice que hay un problema de linker.. o algo asi......??? ..help

Griph

¿Qué versión del IDE Dev-C++ usás (acordate que no es un compilador, sino que simplemente un IDE simplemente del mingw32: /Dev-Cpp/mingw32/ puedes mirar los directorios /lib y /bin para informarte un poco)?

Al menos en la versión Dev-C++ 4.9.8.0 puedes probar lo siguiente:

Herramientas/Opciones del Compilador: vas a la siguiente:

--> Generación/Optimización de Código
    -->Compilador C:
Citar
                    --> Soportar todos los programas en C ANSI Estandar [Yes]
                    --> Soportar Preprocesadores Tradicionales de C [Yes]
                    --> Desactivar todos los Mensajes de Aviso (Warnings) [No]

Probá dejando ésas opciones de ésa forma.
Zheo escribió un texto sobre el Dev-C++ (ó Dev-Cpp) el cual está en la web de este foro o en el foro de programación general (leete la ayuda de la aplicación, siempre es útil).

Pequeño detalle:

Si bien la función "printf()":


#include <stdio.h>
int printf(const char *format...);


Uso:


#include <stdio.h>
printf("Cadena de texto");


Está declarada en el fichero de cabecera stdio.h, no ocurre lo mismo con "exit()":


#include <stdlib.h>
exit();


Está declarada en stdlib.h, y en los argumentos toma diversos valores (numéricos). Ejemplo:


exit(0); // termina el programa de modo normal.



exit(1); /* termina el programa de forma anormal (se usa generalmente cuando hacés una comprobación, y ésta da NULL o cero). */



exit(3); /* termina el programa abortandolo. */


Ésta última es abort():


#include <stdlib.h>
void abort(void);


Uso:


#include <stdlib.h>
abort(); // Te imprime en la salida estándar: "abnormal program termination"


Un saludo.

PD: podrías copiar y pegar en una cita el error específico que te el compilador.
"...la Base está en Aprender a Programar..."

kichan

la 4.9.8.0
mas o menos estos son los errores que me arroja

  [Warning] cannot find entry symbol _mainCRTStartup; defaulting to 00401000
  [Linker error] undefined reference to `printf'
     [Linker error] undefined reference to `exit'
  [Linker error] undefined reference to `_alloca'
  [Linker error] undefined reference to `__main'
  [Linker error] undefined reference to `memset'
  ld returned 1 exit status
C:\Documents and Settings\Multimedia10\Escritorio\Makefile.win [Build Error]  [Proyecto1.exe] Error 1

-Chago

Si lo estas compilando como C++ prueba:
#include <cstdlib>  en lugar de  #include <stdlib.h>

Suerte..
El mundo está escaso de "genios"... Einstein murió, Mozart también y a mi me duele la cabeza..

Griph

El error está en otra parte del código, lo podrías postear.

Una pregunta ¿vos entendés lo que hace el código? o ¿simplemente intentas compilarlo sin saber nada de C?

Otra cosa ¿Revisaste que el Dev-C++ soporte las aplicaciones en C ANSI Estandar y los Preprocesadores tradicionales de C?
"...la Base está en Aprender a Programar..."

Slasher-K

Si los soporta, y también tiene librerías Unicode.

Es muy probable que falle alguna librería. Desinstala el compilador y volvelo a instalar, o mejor pasate al lccwin32 :P.

Saludos.



A la reina de las profundidades que cuida los pasos de una sombra en la noche :*

Pseudoroot

no se mucho sobre ese compilador ,  pero que ventajas tiene sobre Dev C++,  (IDE).   ?
Supongo que no es gratuito o si.?
de todos modos voy a ver que tal es ,buscando algo de informacion al respecto.
www.g e d z a c.com

www.espavirus.com/foro

-Chago

Personalmete creo q' DevCpp es de los compiladores mas practicos, lei q' usabas la version 4.9.8.0, ya salio la 4.9.9.2, supongo q' podria haber corregido posibles errores con versiones anteriores como la tuya..

Saludos..
El mundo está escaso de "genios"... Einstein murió, Mozart también y a mi me duele la cabeza..

zheo

Cita de: Slasher Keeper , y también tiene librerías Unicode.
quote]

Creo que estás confundiendo términos. ANSI es un comité de estándares.
ASCII y UNICODE son formatos de representación de caracteres.

kichan  ,bBájate la última versión del Dev-C++ que, entre otras cosas, trae una nueva versión del compilador.
Sólo hay 10 tipos de personas: las que saben binario y las que no.

¿Quieres programar un videojuego? Si quieres unirte pulsa aqui

Slasher-K

Citar
Conjunto de caracteres

La mayoría de funciones que usan cadenas en Windows NT/2000/XP se suministran en dos versiones: una para caracteres ANSI y otra para caracteres Unicode. Las funciones para ANSI tienen el sufijo "A", mientras que las funciones para Unicode tienen el sufijo "W". Podemos resolver este problema de dos maneras:

    * Declarar el nombre de la función con un sufijo.
    * Usar el parámetro CharSet en el atributo DllImport, una salida más elegante.

Veamos cómo quedan las declaraciones ahora:

[DllImport("Advapi32.dll", EntryPoint="GetUserName", CharSet=CharSet.Unicode)]

unsafe private static extern bool GetUserNameW(char * lpBuffer, int * nSize);
[DllImport("Advapi32.dll", EntryPoint="GetUserName", CharSet=CharSet.Ansi)]

unsafe private static extern bool GetUserNameA(sbyte * lpBuffer, int * nSize);

Observe que los tipos entregados varían según se use la versión para ANSI o Unicode:

    * "sbyte *" en las versiones para ANSI
    * "char *" en las versiones para Unicode


Fuente: MSDN Library
http://www.microsoft.com/spanish/msdn/comunidad/mtj.net/voices/art77.asp



A la reina de las profundidades que cuida los pasos de una sombra en la noche :*