0

DecompileTestApplication_Program.h

#ifndef _DecompileTestApplication_Program_
#define _DecompileTestApplication_Program_
struct DecompileTestApplication_MyAnotherProgram;
#include <stdio.h>
typedef struct {
    //Variables
    int ind;
    int a;
    int b;
    int __refs__;
} DecompileTestApplication_Program;
void DecompileTestApplication_Program_Plan( DecompileTestApplication_MyAnotherProgram* );
//error: expected ')' before '*' token
#endif

DecompileTestApplication_MyAnotherProgram.h

#ifndef _DecompileTestApplication_MyAnotherProgram_
#define _DecompileTestApplication_MyAnotherProgram_
struct DecompileTestApplication_Program;
#include <stdio.h>
typedef struct {
    //Variables
    DecompileTestApplication_Program* program;
    int __refs__;
} DecompileTestApplication_MyAnotherProgram;
#endif

これも私の IL (C#\VB コンパイル コード) から C デコンパイラへの変換です。それを行うためにいくつかの方法を試しましたが、コンパイルが成功しません。ところで、私は Dev-Cpp を使用して元の C でコンパイルします。

4

2 に答える 2

0

C では、タグを使用して構造体型を宣言しても、生のタグは型として宣言されません (C++ とは異なります)。あなたがしなければなりません:

typedef struct DecompileTestApplication_MyAnotherProgram DecompileTestApplication_MyAnotherProgram;

そして、水平スクロールバーがないと、SOの1行に収まりません。

structまたは、タグの前に毎回次のプレフィックスを付ける必要があります。

void DecompileTestApplication_Program_Plan(struct DecompileTestApplication_MyAnotherProgram*);

拡大された答え

struct単一の単語がusingのエイリアスであることを確認するだけでなく、各タイプにtypedef1 つだけ存在することも確認する必要があります。typedef

余談ですが、ヘッダー ガードの名前は、実装用に予約されている名前空間 (つまり、C コンパイラを作成する人用) に侵入しています。そうしないでください。一般にアンダースコアで始まる名前は使用しないでください。特に、2 つのアンダースコアまたは 1 つのアンダースコアと大文字で始まる名前は使用しないでください。

コンテキストでは、次のことを意味します。

DecompileTestApplication_Program.h

#ifndef DecompileTestApplication_Program_header
#define DecompileTestApplication_Program_header
typedef struct DecompileTestApplication_MyAnotherProgram DecompileTestApplication_MyAnotherProgram;
typedef struct DecompileTestApplication_Program DecompileTestApplication_Program;
struct DecompileTestApplication_Program
{
    //Variables
    int ind;
    int a;
    int b;
    int __refs__;  // This is not safe either!
};
// Why is this function declared here and not in the other header?
void DecompileTestApplication_Program_Plan(DecompileTestApplication_MyAnotherProgram *prog);
#endif

DecompileTestApplication_MyAnotherProgram.h

#ifndef DecompileTestApplication_MyAnotherProgram_header
#define DecompileTestApplication_MyAnotherProgram_header
#include "DecompileTestApplication_Program.h"
struct DecompileTestApplication_MyAnotherProgram
{
    //Variables
    DecompileTestApplication_Program* program;
    int __refs__;  // Dangerous
};
#endif

どちらのヘッダーも必要ありません<stdio.h>

于 2012-07-16T02:21:51.607 に答える
0

これは C++ ではなく C です。構造体を宣言/定義しても、新しい型名は作成されません。したがって、最初のファイルの関数宣言は

void DecompileTestApplication_Program_Plan(struct DecompileTestApplication_MyAnotherProgram);

または、typedef を使用する必要があります。

typedef struct DecompileTestApplication_MyAnotherProgram DecompileTestApplication_MyAnotherProgram;

この場合、typedef2 番目のファイルのキーワードを省略して、

struct XXX.... {
};
于 2012-07-16T02:25:18.963 に答える