это действительно
void *p = &X; /* some thing */
p += 12;
и если да, то на что сейчас указывает p?
У меня есть (сторонний) код, который делает это (и компилируется чисто), и я предполагаю, что void * был обработан как char *. Мой верный K & R молчит (ish) на тему
РЕДАКТИРОВАТЬ: мое маленькое тестовое приложение работает нормально на gcc 4.1.1 и обрабатывает void * как char *. Но g ++ barfs
Я знаю, как это сделать правильно. Мне нужно знать, нужно ли мне чистить эту базу кода, чтобы найти все места, где это сделано.
Кстати, gcc -pedantic выдает предупреждение
Резюме:
Спецификация C неоднозначна. Это говорит о том, что с точки зрения представления и использования в качестве параметров функции void * = char *. Но он ничего не говорит об арифметике указателей.
- gcc (4) разрешает это и рассматривает это как
символ *
- g ++ отказывается
- gcc -pedantic предупреждает об этом
- vs2010 как c, так и c ++
отказывается