之間我有一個小程序,這裏面的代碼讀取文件:差異WIN32和其他C字符串
#ifdef WIN32
unsigned char *buffer = (unsigned char *)alloca((unsigned int)ui.length);
#else
unsigned char buffer[ui.length];
#endif
爲什麼用於Win32平臺和字符數組用於其他平臺的指針?
之間我有一個小程序,這裏面的代碼讀取文件:差異WIN32和其他C字符串
#ifdef WIN32
unsigned char *buffer = (unsigned char *)alloca((unsigned int)ui.length);
#else
unsigned char buffer[ui.length];
#endif
爲什麼用於Win32平臺和字符數組用於其他平臺的指針?
它似乎以前C99不支持在棧上定義一個可變長度數組。 alloca基本上這樣做。看起來這個程序員有一個不支持VLA的WIN32編譯器,所以使用了(支持良好但非標準的)alloca。
更多關於這個在堆棧溢出:Why is the use of alloca() not considered good practice?和這個相當有用的數組摘要http://www.programmersheaven.com/2/Pointers-and-Arrays-page-2由Arthur在堆棧溢出帖子中提到。
Windows沒有什麼特別之處。不同之處在於Microsoft Visual C++ does not supportVariable-length array (VLA)(C99功能),作者可能認爲MSVC == WIN32,因此創建了該條件。