Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





__int8, __int16, __int32, __int64...

Iniciado por O2, 10 de Marzo de 2003, 06:07:37 PM

« anterior - próximo »

O2

                                Mirando en la MSDN sobre estos tipos de datos, dicen que con ellos te puedes definir tus propios enteros de diferentes tamaños y tal.... si envargo luego dicen esto:

Citar
Because __int8, __int16, and __int32 are considered synonyms by the compiler, care should be taken when using these types as arguments to overloaded function calls. The following C++ code generates a compiler error:

void MyFunc( __int8 ) {}
void MyFunc( char ) {}

void main()
{
   __int8 newVal;
   char MyChar;
   MyFunc( MyChar );    // Ambiguous function calls;
   MyFunc( newVal );    // char is synonymous with __int8.
}

Entoces... si son = para el compilador, para que cojones sirven?

¿Podria definir diferentes tipos de enteros y que el compilador los diferenciara?

Gracias!                                

ethernet

A veces interesa hacer q tus programas sean portables y como sabras para diferentes procesadores int, long o short no tienen q ocupar el mismo tamaño en las diferentes plataformas. En el caso de q quieras una variable de 16 bits pillas el __int16 y punto. Incluso puedes definirtelos tu mismo :) (en funcion de la arquitectura claro)

saludos

synchrnzr

                                Me parece que a lo que se refieren en este texto es que __int8, __int16, etc... son sinónimos de otros tipos estándar de C y que hay que ir con cuidado en la sobrecarga de funciones para evitar declaraciones ambiguas.

El ejemplo que te pone es que __int8 es en realidad de tipo char (como si antes hubiéramos hecho #define __int8 char) y por tanto estas dos declaraciones:

void MyFunc( __int8 ) {}
void MyFunc( char ) {}

son ambiguas, ambas son void MyFunc( char ){} porque __int8 es en realidad de tipo char.

De todas formas lo que te he dicho lo pone en los comentarios del ejemplo, no veo donde tienes el problema :loco:

sync                                

O2

                                Entendi que __int8, __int16 e __int32 eran sinonimos entre si, y que:

void f(__int8 a);

y

void f(__int16 a);

seria lo mismo :)

Ok, Gracias a los dos por la aclaración!