es válida esta¿Puedo hacer aritmética en punteros void * en C?
void *p = &X; /* some thing */
p += 12;
y si es así ¿qué p ahora apuntar a? Tengo un código de (tercero) que hace esto (y compila limpiamente) y mi suposición es que el vacío * fue tratado como un char *. Mi fiel K & R es silenciosa (ish) sobre el tema
EDITAR: Mi pequeña aplicación de prueba funciona bien en gcc 4.1.1 y trata void * como char *. Pero g ++ barfs
Sé cómo hacerlo correctamente. Necesito saber si tengo que limpiar esta base de código para encontrar todos los lugares en los que está hecho.
Por cierto GCC -pedantic lanza una advertencia
Resumen:
especificaciónEl C es ambiguo. Dice que en términos de representación y uso como parámetros de función void * = char *. Pero no dice nada sobre la aritmética del puntero.
- gcc (4) lo permite y lo trata como char *
- g ++ rechaza
- -pedantic gcc advierte de ello
- VS2010 tanto C y C++ rechaza
relacionados? http://stackoverflow.com/questions/1997751/c-gcc-compiler-options-for-pointer-arithmeticwarning – pmg