On Fri, 09 Jan 2004 18:39:26 +0100, Martin J Sanchez
Post by Martin J. SanchezPost by Fernando ArbeizaUna vez se negoció la norma, todo lo demás pasaron a ser dialectos o
extensiones.
Eso si que no se de donde lo sacas. El estandar simplemente define un
estandar al que pone apellidos (estandar ISO/IEC), no se apropia para
nada del termino "C", aunque evidentemente pretenda homogeneizar el
uso de un lenguaje tan popular a partir de una especificacion formal.
Una norma llega (debería llegar) a serlo tras pasar un período de
discusión entre todas las partes implicadas. Y en esta norma se trata de
definir, de una vez, el lenguaje de programación C, para que se sepa lo
que significa ese término. Si todas las partes llegaron a este consenso:
[#1] This International Standard specifies the form and
establishes the interpretation of programs written in the C
programming language.
El ejemplo típico que se me ocurre es la alta tensión. Tú podías llamar
alta tensión al voltaje que te diese la gana. Una vez llegó la norma de
alta tensión, la alta tensión se definió a partir de X voltios.
Yo creo que decidieron llamar a lo definido ahí C. Y lo que vaya
aparte, habrá que especificarlo (sintaxis K&R, extensiones GNU,
extensiones VISUAL C...).
Post by Martin J. SanchezDe todas formas cuando yo hablo de C (como todos creo), habitualmente
nos referimos a un programa que es conforme con la especificacion
ANSI-C.
Cuando yo hablo de C, me refiero a un lenguaje de programación, que se
decidió se definiría en la norma anterior (lo sé, soy muuuuy polilla,
pero ya soy muy mayor para cambiar ;-)
Post by Martin J. SanchezPost by Fernando Arbeiza....
Post by Martin J. SanchezSegundo, el unico que dice que el codigo que usa funciones que no son
de la libreria ANSI C, no es C, eres tu.
Juraría que no he dicho que el código no es C. Lo que sí he dicho es que
las funciones utilizadas no son C, lo que hace que el programa no sea
portable (y que se deba indicar en qué sistema se pueden utilizar).
Pues bien, aqui es donde creo que te expresas mal. Lo logico seria
decir que esas funciones no son de la libreria estandar ANSI C, o que
el programa no es "estrictamente conforme con ANSI-C" (termino
definido en el estandar).
[ ... ]
Lo que viene a decir que un compilador y/o libreria es conforme
mientras su comportamiento no vaya en contra de lo definido por el
estandar.
Estoy completamente de acuerdo con que el código ese será conforme (no
estrictamente conforme). Pero las funciones no pertenecen (no son) C.
Ejemplo:
/* ... */
#include <stdio.h>
#include <unistd.h>
#include <curses.h>
void funcion(void) { return; }
int main(void) {
initscr();
endwin();
sleep(3);
printf("hola");
funcion();
return 0;
}
/* ... */
Este es un programa conforme. El código (programa) es C. Y la función
funcion() aparece definida, es C.
La función printf() es (pertenece a) C porque la norma define la función
y su resultado.
La función sleep() no es (no pertenece a) C. No está definida en la
norma. Es una llamada al sistema operativo (utilizando C para realizar
la llamada); el resultado de la llamada lo definirá el sistema
operativo.
Las funciones initscr(), endwin() no son (no pertenecen a) C. No están
definidas en la norma. Son funciones de una librería externa cuya
documentación definirá su resultado.
Ya sé que que es una pequeña distinción semántica (no son C <-> no
pertecen a la librería de C), y como tal puede que no merezca más
discusión. Yo sólo digo que la función que no aparezca definida en la
norma ni en el programa, no es C por eso mismo. Si es una llamada al
sistema operativo está muy claro (la función sólo es una interfaz hacia
una llamada al sistema -que podría hacerse en cualquier lenguaje-). Si
es una librería externa, puede estar menos claro, pero tampoco es C,
puesto que el resultado de la llamada a tal función no aparece
especificada en la norma (a no ser que incluyas el código fuente en el
tuyo, con lo que sí estaría especificada (a no ser que incluyas el
código fuente en el tuyo, con lo que sí estaría especificada).
Pero, cómo digo más abajo, intentaré cambiar mis palabras, para no tener
discusiones de este tipo.
Post by Martin J. SanchezPost by Fernando ArbeizaSi de verdad crees que sólo confundo, no haré más apreciaciones de
este tipo.
No me interpretes mal. Eres uno de los pocos que haceis una labor muy
notable en este grupo. En ningun caso pretendo que te sientas
coaccionado en tus respuestas o apreciaciones, que por cierto habran
ayudado a entender C a muchas personas. Simplemente me parece mas
correcto y claro usar el termino "no esta definido en ANSI-C" o algo
parecido, a un simple "eso no es C".
Tienes razón. Utilicé la frase "Eso no es C" y no era lo correcto. Tenía
que haber puesto "Esas funciones no son C".
Pero me gusta el término medio. Pongamos "Tales funciones no están
definidas en la norma de C" (ni pa ti, ni pa mí :-).
Post by Martin J. SanchezUn saludo ;-) (y aunque tarde: feliz año!)
Igualmente, y próspero :-)
--
Fernando Arbeiza <URL: mailto:***@ono.com>
Crea tu propio Linux: <URL: http://www.escomposlinux.org/lfs-es>