Diferencia entre byte y char en C

2 minutos de lectura

Me pregunto por qué no puedo compilar un ejemplo del libro. Simplifico el ejemplo aquí para evitar publicar un ejemplo de un libro con derechos de autor.

#include <stdio.h>

BYTE *data = "data";

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

Cuando compilo con g ++, obtengo un error,

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

El programa funciona simplemente reemplazando BYTE con char, pero debo estar haciendo algo mal ya que el ejemplo proviene de un libro.

Por favor ayuda señalando el problema. Gracias.

  • la pregunta esta etiquetada Cpero dices que estás usando g++ el cual es un C++ compilador. ¿Qué idioma estás usando?

    –CB Bailey

    20 de octubre de 2009 a las 6:15

  • Estoy usando la parte C de C++. ¿No es C++ retrocompatible con C, así que si solo estoy usando la parte C, no importa g++ o gcc?

    – idazuwaika

    20 de octubre de 2009 a las 8:34

  • C++ no es un superconjunto de C (faltan algunas cosas). Sin embargo, no importa para esta pregunta.

    – rsaxvc

    18/04/2015 a las 22:33

avatar de usuario
CB Bailey

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

En muchos sistemas que definen un BYTE macro, a menudo es una unsigned char. Convertir de un const char* a una unsigned char* requeriría un reparto explícito.

  • Sí, ahí está su respuesta idazwaika: las definiciones de tipos de datos personalizados pueden causar problemas.

    – ChrisBD

    20 de octubre de 2009 a las 6:36

  • También es posible que desee tener en cuenta que el estándar C permite que el compilador haga que el carácter sea un carácter con signo o sin signo, lo que puede generar algunos resultados inesperados.

    – Tim Kriger

    20 de octubre de 2009 a las 7:17

  • Gracias. Parece que tengo que buscar la definición de macro BYTE. ¿Hay alguna manera de obtener la salida del preprocesador C donde las macros ya están traducidas?

    – idazuwaika

    20 de octubre de 2009 a las 8:39

  • idazuwaika: use gcc -E (solo preprocesamiento; no compile, ensamble ni enlace)

    – yalmo

    20 de octubre de 2009 a las 9:27

¿Ha sido útil esta solución?