2009-10-20 39 views
8

Me pregunto por qué no puedo compilar un ejemplo del libro. Simplifico el ejemplo aquí para evitar publicar ejemplos de un libro protegido por derechos de autor.Diferencia entre byte y char en C

#include <stdio.h> 

BYTE *data = "data"; 

int main() 
{ 
    printf("%s", data); 
    return 0; 
} 

Cuando compilación con g ++, me sale error,

error: invalid conversion from 'const char*' to 'BYTE*' 

El programa funciona mediante la simple sustitución BYTE con carbón, pero deben estar haciendo algo mal ya que el ejemplo viene de un libro.

Por favor ayuda a identificar el problema. Gracias.

+1

La pregunta está etiquetada 'C', pero dices que estás usando' g ++ 'que es un compilador' C++ '. ¿Qué idioma estás usando? –

+0

sí, C o C++? – Raptor

+2

Estoy usando la parte C de C++. ¿No es C++ compatible con C, por lo que si solo uso la parte C, no importa g ++ o gcc? – idazuwaika

Respuesta

27

BYTE no forma parte de la biblioteca estándar de lenguaje C o C, por lo que depende totalmente del sistema si se define después de incluir solo el archivo de encabezado estándar stdio.h.

En muchos sistemas que definen una macro BYTE, a menudo es unsigned char. La conversión de const char* a unsigned char* requeriría un lanzamiento explícito.

+0

Sí, hay su respuesta idazwaika - las definiciones de tipos de datos personalizados pueden causar problemas. – ChrisBD

+0

También le conviene observar que el estándar C le permite al compilador hacer char para que sea char firmado o char sin signo, lo que puede generar algunos resultados inesperados. –

+0

Gracias. Parece que tengo que buscar la definición de macro BYTE. ¿Hay alguna manera de obtener la salida del preprocesador C donde ya se han traducido las macros? – idazuwaika

Cuestiones relacionadas