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!
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
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
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!