elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Qué es el estándar en C?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Qué es el estándar en C?  (Leído 3,769 veces)
Uknow

Desconectado Desconectado

Mensajes: 24


Ver Perfil
¿Qué es el estándar en C?
« en: 26 Junio 2013, 06:27 am »

Parece tonta la pregunta pero no lo tengo claro, ¿qué se considera compilar un código por medio del estándar? ¿que el código sólamente incluya las librerías que se encuentran aquí ? ¿cómo sé cuándo compilo rigiéndome por el estandar? ¿cuando le agrego al compilador la opción -ansi?

y otra duda aparte, cuando escribo un código (q imprima un número y use getch() para parar) sin incluir ninguna libería, ¿por qué compila? ¿por la rtl? y si es así, ¿cómo sé cuáles funciones tiene la rtl y cuáles no? uso mingw en windows.

ah! también, ¿es posible tener un ejecutable q no cargue kernel32 ni ntdll ?

Gracias.

saludos.


En línea

pacoperico

Desconectado Desconectado

Mensajes: 100


Ver Perfil
Re: ¿Qué es el estándar en C?
« Respuesta #1 en: 26 Junio 2013, 21:47 pm »

El lenguaje C es un lenguaje estandarizado es decir, hay un organismo oficial que supervisa el lenguaje y establece cuales son los elementos y las reglas que ha de contener el lenguaje C para que se le considere "c estandar" o "ansi c" que son lo mismo.

Para que podamos decir que un determinado programa compilador es un "compilador de C" ha de ser capaz de compilar un archivo de codigo fuente escrito segun las reglas del lenguaje C estandar.

A la hora de compilar tu programa con gcc añade esta opcion:
Código:
-std=c99
Esto significa que la compilacion se hara conforme al estandar, en este caso sera segun el estandar c99.

No es logico que puedas compilar un programa usando la funcion getch() sin incluir la cabecera, de forma predeterminada gcc te lo compila sin problemas. Intenta compilarlo con la opcion de -std=c99 y veras como en este caso te dara errores de compilacion ya que segun el estandar para usar una funcion hay que hacer un #include al archivo de cabecera.

Ejcutables los hay de mil maneras y mil colores, depende del compilador que estes usando. Si estas en una maquina linux seguro que tu ejecutable no va a hacer uso de kernel32 ni ntdll. Si usas un compilador que crea ejecutables de 16 bits como el turbo c de borland, no hara uso de kernel32 pero si usara algun otro programa o dll a moso de emulador, para poder correr un ejecutable de 16 bits en una maquina de 32.


En línea

Uknow

Desconectado Desconectado

Mensajes: 24


Ver Perfil
Re: ¿Qué es el estándar en C?
« Respuesta #2 en: 27 Junio 2013, 00:39 am »

Según tengo entendido el include lo único que hace es especificar los prototipos de las funciones que se encuentran dentro d la librería. Si compilas esto en windows con gcc, tienes lo siguiente:
Código
  1. #define PI 3.14
  2.  
  3. int main (void)
  4. {
  5.        printf("hi, %f\r\n", PI);
  6.        getch();
  7.        return 0;
  8. }
  9.  
Código:
gcc x.c -o x.exe -std=c99

Me da dos warnings d declaraciones implicitas por no haber incluído nada pero compila d lo más bien.

Si dices que para que un compilador compile regido por el estándar se le debe agregar la opción -std no entiendo porqué compila teniendo la función getch el código. La opción que veo es que hayan liberías que se incluyan por defectos en donde esté la función getch, pero ¿por qué se incluirían esas librerías si coloco la opción -std=c99? es lo que no entiendo.

Gracias por responder,

saludos.
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: ¿Qué es el estándar en C?
« Respuesta #3 en: 27 Junio 2013, 03:04 am »

Compilando tu programa con CygMing (la versión de gcc 4.5.3 para el entorno Cygwin) se presentan las dos advertencias y no se genera el ejecutable.

¿Que versión de gcc estas utilizando?

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Uknow

Desconectado Desconectado

Mensajes: 24


Ver Perfil
Re: ¿Qué es el estándar en C?
« Respuesta #4 en: 27 Junio 2013, 03:13 am »

gcc version 3.4.2 (mingw-special)

Yo sigo sin entender por qué influye en nada la versión o el compilador que se use, no se supone que si se especifíca que se desesa compilar rigiéndose por el estándar el compilador debe tomar la configuración correspondiente y hacerlo? :l

saludos.
En línea

pacoperico

Desconectado Desconectado

Mensajes: 100


Ver Perfil
Re: ¿Qué es el estándar en C?
« Respuesta #5 en: 27 Junio 2013, 04:13 am »

Eso ya es un tema de compiladores, a mi con el compilador de visual studio no me crea el ejecutable y con el cygwin parece que tampoco lo permite.

Si la version que tienes de gcc te crea el ejecutable eso ya es un tema interno de gcc.   Seguramente sea cosa del linker, a lo mejor cuando encuentra una funcion que no ha sido definida, de modo predeterminado el enlazador la busca en la libreria que trae consigo gcc.

Eso ya que algun compañero del foro que conozca gcc a fondo lo confirme o no, o mirarlo en el foro de gcc.
En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: ¿Qué es el estándar en C?
« Respuesta #6 en: 29 Junio 2013, 20:41 pm »

 GCC te dará un warning de declaración implícita, al no tener un prototipo con el que trabajar y señalarte si le faltan o sobran argumentos a una función, generará código objeto con referencias a las funciones que llames, y se lo pasará al linker.

 Si el linker encuentra la función, como parece hacer en este caso, porque enlace tu ejecutable con alguna librería por defecto, pues no te lanzará ningún error.

Saludos.
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Barra de botones estandar
Programación Visual Basic
Malkavian_71 1 1,398 Último mensaje 14 Febrero 2006, 23:02 pm
por Kizar
Reaolucion estandar!
Dispositivos Móviles (PDA's, Smartphones, Tablets)
poxomata 0 2,310 Último mensaje 6 Junio 2011, 12:57 pm
por poxomata
No encuentra la laibrería estandar en Visual C++
Programación C/C++
Meta 4 2,221 Último mensaje 13 Marzo 2017, 14:11 pm
por Meta
Convertir el DRM en un estándar de los navegadores ¿adiós a la web abierta y ...
Noticias
wolfbcn 0 974 Último mensaje 3 Abril 2017, 18:06 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines