C项目赢得';t在VisualStudio2010中编译

C项目赢得';t在VisualStudio2010中编译,c,visual-studio-2010,C,Visual Studio 2010,我有一个简单的C程序,我可以在Linux上通过命令行很容易地编译,但我想使用Visual Studio调试该程序,这样我可以更容易地看到它在做什么,但我无法编译它 我已经创建了一个新的cpp Win32控制台应用程序。添加了我的.c和.h文件,但我无法将其编译。我收到100多个错误,这些错误似乎都是骗人的。例如,我有一个错误,当我看到一个变量在前面的行中声明时,它没有声明。例如: int i; for (i = 0; i < unpacked_length; i++) { Intelli

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

我已经创建了一个新的cpp Win32控制台应用程序。添加了我的.c和.h文件,但我无法将其编译。我收到100多个错误,这些错误似乎都是骗人的。例如,我有一个错误,当我看到一个变量在前面的行中声明时,它没有声明。例如:

int i;
for (i = 0; i < unpacked_length; i++)
{
IntelliSense:类型为“const char*”的值不能用于初始化类型为“unsigned char*”的实体

由于这在通过命令行编译时有效,我不知道为什么intellisense会在这里给出这个错误,除非这个编译器与我通过命令行使用的另一个编译器有不同的规则。我已经有15年没有做过任何C语言了,我不知道这是否会对编译器造成影响,或者这里是否还有其他问题

源中仅包含以下内容:

#include "dtcrypt.h"
#include <string.h>
#include <stdlib.h>
#包括“dtcrypt.h”
#包括
#包括

谢谢你的帮助

> P >代码> char < /C> >是VisualC++中的编译器设置。将其更改为unsigned以匹配预期的GCC环境。项目属性,C/C++,语言

至于循环中的
i
,一定有一些额外的信息没有显示出来。在我看来,这两条粘贴的线是合乎犹太教的


< >我在VC++和GCC之间移植代码的经验很丰富,它几乎不漂亮。<代码> char < /C> >是VisualC++中的编译器设置。将其更改为unsigned以匹配预期的GCC环境。项目属性,C/C++,语言

至于循环中的
i
,一定有一些额外的信息没有显示出来。在我看来,这两条粘贴的线是合乎犹太教的


这就是说,我在VC++和GCC之间移植代码方面有丰富的经验-这几乎不漂亮。

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++)
    {
        ...
    }
}
void my_函数()
{
/*变量声明在这里*/
int i;
...
/*现在是codez*/
对于(i=0;i

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

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++)
    {
        ...
    }
}
void my_函数()
{
/*变量声明在这里*/
int i;
...
/*现在是codez*/
对于(i=0;i

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

不要搞乱编译器设置,而是将其键入“unsigned char*”


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

不要搞乱编译器设置,而是将其键入“unsigned char*”


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

你能编辑你的帖子,让它包含显示问题的最小完整代码吗?我会看看我能做些什么。此代码是第三方为我们编写的加密程序,因此我无法发布该程序。我将把它缩小到一个问题的大小,如果确实答案没有弹出到某人看到我的情况上面的细节。你能编辑你的文章,包括最小的完整代码,显示问题吗?我会看看我能做什么。此代码是第三方为我们编写的加密程序,因此我无法发布该程序。我会把它缩小到一个问题的大小,如果通过查看上面我的情况的细节,确实没有找到答案。你也可以从行中删除“unsigned”。如果编译器将“char*”默认为“unsigned”,那么它是多余的,否则它是错误的。您也可以从行中删除“unsigned”。如果编译器将“char*”默认为“unsigned”,那么它是多余的,否则它是错误的。我永远不会明白这一点。非常感谢!我永远也想不到这一点。非常感谢!