[ANSI C] Split(), strlen(), mid(), Instr(), strcpy().

Iniciado por BlackZeroX, 12 Enero 2011, 22:55 PM

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

08l00D

Cita de: Littlehorse en 13 Enero 2011, 20:29 PM
No, en C++ bool es un tipo de dato primitivo aparte. En C, desde C99 como bien decís, se define mediante macros en stdbool.h, pero es al día de hoy que se sigue definiendo aparte no solo por retrocompatibilidad, también por claridad de código.
_Bool como puse arriba es una palabra reservada por tanto nuevo tipo... y te podes dar cuenta por 2 cosas no se necesita incluir ningun archivo de cabecera (que tenga un typedef, definicion de constante, enumeracion, etc) para poder declarar variables con _Bool y la otra es que las palabras reservadas(luego del estandar) suelen llevar como primer caracter el guion bajo.. al igual que _Complex _Imaginary .. tambien introducidos en C99...
bool en stdbool.h si es una macro... no dije que no lo fuera


Cita de: Littlehorse en 13 Enero 2011, 20:29 PM
No esta establecido que sea una mala practica no utilizar NULL. Es simplemente una cuestión de estilo que se suele aplicar mas que nada en código critico donde se requiera dejar bien en claro que se esta tratando con punteros, pero no mas que eso.

Saludos
Si tenes razon, lo dije sin ser demasiado objetivo... en lo personal no me gusta dejar al compilador que haga ese tipo de conversiones (de constantes a punteros) por que hay situaciones en donde el compilador no es capaz de realizar la conversion...
por ejemplo.. en el paso de un argumento a una funcion que espera un puntero, si la funcion no tiene prototipo el cual no es obligatorio en C, se le esta pasando un int ... en vez de (void *)(0) ...
ademas para mi le da mas legibilidad al codigo...es lo mismo que lo de true o false.. gustos personales

Littlehorse

Citar_Bool como puse arriba es una palabra reservada por tanto nuevo tipo... y te podes dar cuenta por 2 cosas no se necesita incluir ningun archivo de cabecera (que tenga un typedef, definicion de constante, enumeracion, etc) para poder declarar variables con _Bool

Que sea una palabra reservada no implica que sea un nuevo tipo, "for" es una palabra reservada y hasta donde se no es un tipo de dato  ;D.
En todo caso si es como decís, realmente dudo mucho que no haya un typedef, pero ya mirare cuando haya tiempo. Igualmente por ahora te tomo la palabra ya que para comprobarlo tendría que instalar GCC y no puedo en este momento. En Vs el soporte a C99 es menor y en C++ _Bool no es mas que un typedef de bool.

Citaren lo personal no me gusta dejar al compilador que haga ese tipo de conversiones (de constantes a punteros) por que hay situaciones en donde el compilador no es capaz de realizar la conversion...

Intenta buscar 3 ejemplos en el que el compilador no sea capaz de realizar la conversión de 0 a NULL y veras que en ninguno el problema radica exclusivamente en utilizar o no utilizar NULL.

Un ejemplo claro es el que expones:

Citar
en el paso de un argumento a una funcion que espera un puntero, si la funcion no tiene prototipo el cual no es obligatorio en C, se le esta pasando un int ... en vez de (void *)(0) ...

Si no tenes un prototipo de función declarado partís de un error inicial. Usar o no usar NULL es secundario ya que ese no es exclusivamente el problema, el problema radica en la traba que le pones al compilador.

Código (cpp) [Seleccionar]
int main()
{

func(); //Ups me olvide de pasarle parametros. Es que no habia prototipo ;D

return 0;
}

int func(char *ptr)
{

if(ptr)
{
printf("No es NULL"); //...
*ptr='a'; //Crash
}
else
printf("NULL");
}


Y este es solo uno de mil ejemplos que no tienen nada que ver con usar o no usar NULL.

Saludos!
An expert is a man who has made all the mistakes which can be made, in a very narrow field.