2010-06-22 101 views
1
#include <stdio.h> 
#include <Windows.h> 

int main() 
{ 
    TCHAR buff[1024]; 
    GetLogicalDriveStrings(1024, buff); 

    int i; 
    for(i = 0; buff[i] != 0; i += 4) 
     printf("%S", buff+i); 
} 

当我试图用MSVC编译它,我收到以下错误:为什么不编译?

http://ahb.me/5T-

注释掉GetLogicalDriveStrings(1024, buff);导致代码编译就好的C

+0

也许你应该在问题中提到你正在使用C? – 2010-06-22 05:06:52

+3

在他的辩护中,它被标记为'c' :) – 2010-06-22 05:07:40

+0

并在错误消息中,它是main.c :) – Jason 2010-06-22 05:09:46

回答

7

旧版本需要局部变量在函数调用之前在块的开头声明。将int i;移至该函数的顶部,并声明buff

C++废除了这个要求,就像C99一样。

+0

'C需要在函数调用之前在块的开头声明局部变量。 “C99的情况并非如此。我认为MSVC++仍然不支持C99。 – 2010-06-22 05:08:15

+0

除了关于C++的附加外,还增加了有关C99的注释。 – Amber 2010-06-22 05:09:33

+0

MSVC不支持C99的确令人惊讶,我通常只在Linux上使用C。 – 2010-06-22 06:45:40

1

将其更改为:

#include <stdio.h> 
#include <Windows.h> 

int main() 
{ 
    int i; 
    TCHAR buff[1024]; 
    GetLogicalDriveStrings(1024, buff); 

    for(i = 0; buff[i] != 0; i += 4) 
     printf("%S", buff+i); 
} 

调用函数C.

+0

我怀疑它..他试图调用C控制台程序中的窗口功能,而实际上没有包含lib文件! – thatsalok 2010-06-22 05:40:50

+0

@thatsalok:他正在编译错误,而不是链接错误。 – 2010-06-22 05:43:54

+0

我知道,但我怀疑它会工作:-) – thatsalok 2010-06-22 06:17:24

0

行动之前声明变量 “INT I” 来前行或 “TCHAR的buff [1024]” 后,或重命名你的主要.C到main.cpp中

顺便说一句,你应该使用_t系列函数/宏一旦你决定使用TCHAR:

_tprintf(_T( “...”))