我在一个小程序中得到了这个代码来读取文件:
#ifdef WIN32
unsigned char *buffer = (unsigned char *)alloca((unsigned int)ui.length);
#else
unsigned char buffer[ui.length];
#endif
为什么用于Win32平台的指针和用于其他平台的字符数组?
答案 0 :(得分:2)
以前似乎不支持C99在堆栈上定义可变长度数组。 alloca基本上是这样做的。似乎这个程序员有一个不支持VLA的WIN32编译器所以使用(支持得很好但非标准的)alloca。
关于堆栈溢出的更多内容:Why is the use of alloca() not considered good practice?以及Arthur在堆栈溢出帖子中提到的这个相当有用的数组摘要http://www.programmersheaven.com/2/Pointers-and-Arrays-page-2。
答案 1 :(得分:2)
Windows中没有什么特别之处。不同的是Microsoft Visual C ++ does not support Variable-length array (VLA)(C99功能),作者可能认为MSVC == WIN32,因此创建了条件。