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”;