C程序将无法在Visual Studio 2010中编译

我有一个简单的C程序,我可以通过Linux上的命令行轻松编译,但想要使用Visual Studio调试程序,以便我可以更容易地看到它正在做什么,但我无法编译。

我已经创建了一个新的cpp Win32控制台应用程序。 添加了我的.c和.h文件,但我无法编译。 我得到100多个主要看起来像红色鲱鱼的错误。 例如,我有一个错误,说我没有声明变量,我可以看到它在紧接之前的行上声明。 例如:

int i; for (i = 0; i < unpacked_length; i++) { 

在“for”行上我收到一个错误:“错误C2065:’i’:未声明的标识符”

所以其他事情显然正在发生。 一个似乎合法的错误就是这个:

 static unsigned char* Base64_Charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 

IntelliSense:类型为“const char *”的值不能用于初始化“unsigned char *”类型的实体

由于这在通过命令行编译时起作用,我不知道为什么intellisense会在这里给出这个错误,除非这个编译器有不同于我通过命令行使用的另一个规则。 我大约15年没有做任何C,也不知道这可能是编译器的差异,还是这里还有其他东西。

源中唯一包括:

 #include "dtcrypt.h" #include  #include  

感谢任何帮助!

Visual Studio 2010仅支持ANSI C(又名C89),它不支持更现代的C99或C11语言标准。 ANSI C要求您在函数顶部声明所有变量,不能在函数使用之前在函数中间定义它们。 所以尝试重写你的代码,如下所示:

 void my_function() { /* Variable declarations go here */ int i; ... /* Now teh codez */ for (i = 0; i < unpacked_length; i++) { ... } } 

对于第二个错误,Intellisense抱怨它无法将指向const char的指针转换为指向const unsigned char的指针。 字符串文字的类型为char[] (字符数组),默认情况下会对char进行签名。 因此,您应该将变量声明为类型const char *而不是const unsigned char * 。 或者,您可以忽略它,因为它不是编译器错误,但它是某些警告级别的警告。

char是否签名是Visual C ++中的编译器设置。 将其更改为unsigned以匹配预期的GCC环境。 项目属性,C / C ++,语言。

至于循环中的i ,必须有一些你没有显示的额外信息。 这两条粘贴的线看起来像是犹太人。

也就是说,我有足够的经验在VC ++和GCC之间移植代码 – 它几乎没有漂亮。

而不是弄乱编译器设置,将其强制转换为“unsigned char *”

例如:unsigned char * Base64_Charset =(unsigned char *)“ABCDEFG”;