这是有效的吗
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) 允许它并将其视为 char *
- g++ 拒绝它
- gcc -pedantic 警告它
- vs2010 c 和 c++ 都拒绝它