0

Linux のコマンド ラインから簡単にコンパイルできる単純な C プログラムがありますが、Visual Studio を使用してプログラムをデバッグしたいので、プログラムの動作をより簡単に確認できますが、コンパイルできません。

新しい cpp Win32 コンソール アプリケーションを作成しました。.c および .h ファイルを追加しましたが、コンパイルできません。主にレッドニシンと思われる 100 以上のエラーが発生します。たとえば、変数が宣言されていないというエラーが、直前の行で変数が宣言されていることがわかります。例えば:

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

「for」行でエラーが発生します:「エラーC2065: 'i':宣言されていない識別子」

したがって、明らかに何か他のことが起こっています。正当と思われる 1 つのエラーは次のとおりです。

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++)
    {
        ...
    }
}

const char2 番目のエラーの場合、Intellisense は、ポインターをへのポインターに変換できないと不平を言っていますconst unsigned char。文字列リテラルには型char[](文字の配列) があり、charデフォルトで署名されています。const char *したがって、変数をではなく型として宣言する必要がありますconst unsigned char *。または、これはコンパイラ エラーではなく、特定の警告レベルでの警告であるため、無視できます。

于 2012-07-06T19:35:04.053 に答える
1

署名されているかどうかcharは、VisualC++のコンパイラ設定です。予想されるGCC環境に一致するように、unsignedに変更します。プロジェクトのプロパティ、C / C ++、言語。

ループ内に関してiは、表示していない追加情報が必要です。貼り付けられた2つの線は、私にはコーシャに見えます。

そうは言っても、私はVC++とGCCの間でコードを移植した経験が豊富です。

于 2012-07-06T19:33:22.123 に答える
0

コンパイラの設定を台無しにする代わりに、「unsigned char *」に型キャストします

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

于 2012-07-07T17:21:16.793 に答える