我有一个简单的C程序,我可以通过Linux上的命令行轻松编译,但是想要使用Visual Studio来调试程序,以便我可以更容易地看到它正在做什么,但我无法编译它。
我创建了一个新的cpp Win32控制台应用程序。添加了我的.c和.h文件,但我无法编译。我得到100多个主要看起来像红色鲱鱼的错误。例如,我有一个错误,说我没有声明变量,我可以看到它在紧接之前的行上声明。例如:
int i;
for (i = 0; i < unpacked_length; i++)
{
在“for”行上的我收到一个错误:“错误C2065:'我':未声明的标识符”
所以其他事情显然正在发生。一个似乎合法的错误是这个:
static unsigned char* Base64_Charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
IntelliSense:类型为“const char *”的值不能用于初始化“unsigned char *”类型的实体
由于这在通过命令行编译时起作用,我不知道为什么intellisense会在这里给出这个错误,除非这个编译器的规则与我通过命令行使用的规则不同。我大约15年没有做过任何C,也不知道这可能是编译器的差异,还是这里还有别的东西。
源中唯一包括:
#include "dtcrypt.h"
#include <string.h>
#include <stdlib.h>
感谢任何帮助!
答案 0 :(得分:4)
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 *
。或者,您可以忽略它,因为它不是编译器错误,但它是某些警告级别的警告。
答案 1 :(得分:1)
char
是否已签名是Visual C ++中的编译器设置。将其更改为unsigned以匹配预期的GCC环境。项目属性,C / C ++,语言。
对于循环中的i
,必须有一些您未显示的额外信息。两条粘贴的线条看起来像是犹太人。
也就是说,我有很多在VC ++和GCC之间移植代码的经验 - 它几乎没有漂亮。
答案 2 :(得分:0)
而不是弄乱编译器设置,而不是将其强制转换为“unsigned char *”
E.g。 :unsigned char * Base64_Charset =(unsigned char *)“ABCDEFG”;