vs与gcc编译器之间的差别
最近在做一些移植的工作时,相同的代码使用gcc编译全部正常。但是在windows下使用VS2019进行编译时,出现一些语法错误,主要有下面几种:
“void *”: unknown size
1 | void shuffle(void *arr, size_t n, size_t size) |
void *
执行指针算术运算,因为void没有定义大小,进行偏移操作无法确定偏移的单位,因此出现错误提示
1 | memcpy((char*)arr+(i*size), swp, size); |
注:这种修改解决了编译报错的问题,但是与gcc的编译不兼容
small关键字
在编译的代码中定义了
small
变量名,但是其在VS中属于一个关键字,是char
类型的别名
在头文件#include <windows.h>
中包含的<rpcndr.h>
头文件中定义了small
1 |
解决方法:
- 将
samll
的定义去掉:#undef small
- 修改代码
small
变量名
参考
- Is “small” a keyword in c?
- What is RpcNdr.h