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

时间:2012-07-06 19:29:32

标签: c visual-studio-2010

我有一个简单的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>

感谢任何帮助!

3 个答案:

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