vs与gcc编译器之间的差别

最近在做一些移植的工作时,相同的代码使用gcc编译全部正常。但是在windows下使用VS2019进行编译时,出现一些语法错误,主要有下面几种:

“void *”: unknown size

1
2
3
4
5
6
void shuffle(void *arr, size_t n, size_t size)
{
...
memcpy(arr+(i*size), swp, size);
...
}

void *执行指针算术运算,因为void没有定义大小,进行偏移操作无法确定偏移的单位,因此出现错误提示

1
memcpy((char*)arr+(i*size), swp,  size);

:这种修改解决了编译报错的问题,但是与gcc的编译不兼容

small关键字

在编译的代码中定义了small变量名,但是其在VS中属于一个关键字,是char类型的别名

在头文件#include <windows.h>中包含的<rpcndr.h>头文件中定义了small

1
#define small char

解决方法:

  1. samll的定义去掉:#undef small
  2. 修改代码small变量名

参考

  • Is “small” a keyword in c?
  • What is RpcNdr.h