0

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

我创建了一个新的 cpp Win32 控制台应用程序。添加了我的 .c 和 .h 文件,但我无法编译它。我得到了 100 多个错误,这些错误主要似乎是红鲱鱼。例如,当我在之前的行上看到它声明时,我有一个错误说没有声明一个变量。例如:

int i;
for (i = 0; i < unpacked_length; i++)
{

在“for”行我收到一个错误:“error C2065: 'i': undeclared identifier”

因此,显然正在发生其他事情。一个似乎合法的错误是:

static unsigned char* Base64_Charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

IntelliSense:“const char *”类型的值不能用于初始化“unsigned char *”类型的实体

由于这在通过命令行编译时有效,我不知道为什么智能感知会在此处给出此错误,除非该编译器具有与我通过命令行使用的另一个不同的规则。我已经有 15 年没有做过任何 C 语言了,不知道这是否会在编译器中有所不同,或者这里是否还有其他事情发生。

源中唯一包含的是:

#include "dtcrypt.h"
#include <string.h>
#include <stdlib.h>

感谢任何帮助!

4

3 回答 3

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默认情况下是有符号的。因此,您应该将变量声明为 typeconst char *而不是const unsigned char *. 或者,您可以忽略它,因为它不是编译器错误,而是某些警告级别的警告。

于 2012-07-06T19:35:04.053 回答
1

是否char签名是 Visual C++ 中的编译器设置。将其更改为无符号以匹配预期的 GCC 环境。项目属性、C/C++、语言。

至于i在循环中,必须有一些您没有显示的额外信息。两条粘贴的线对我来说看起来很干净。

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

于 2012-07-06T19:33:22.123 回答
0

而不是弄乱编译器设置,将其类型转换为“unsigned char *”

例如:unsigned char* Base64_Charset = (unsigned char *)"ABCDEFG";

于 2012-07-07T17:21:16.793 回答