C项目赢得';t在VisualStudio2010中编译
我有一个简单的C程序,我可以在Linux上通过命令行很容易地编译,但我想使用Visual Studio调试该程序,这样我可以更容易地看到它在做什么,但我无法编译它 我已经创建了一个新的cpp Win32控制台应用程序。添加了我的.c和.h文件,但我无法将其编译。我收到100多个错误,这些错误似乎都是骗人的。例如,我有一个错误,当我看到一个变量在前面的行中声明时,它没有声明。例如: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
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
是有符号的。因此,您应该将变量声明为typeconst 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
是有符号的。因此,您应该将变量声明为typeconst 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”,那么它是多余的,否则它是错误的。我永远不会明白这一点。非常感谢!我永远也想不到这一点。非常感谢!