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编译。
答案 0 :(得分:0)
在C中,使用标记声明结构类型不会将裸标记声明为类型(与C ++不同)。你必须这样做:
typedef struct DecompileTestApplication_MyAnotherProgram DecompileTestApplication_MyAnotherProgram;
如果没有地平线滚动条,那就不适合SO上的一行。
或者,您每次都必须在标记前加struct
:
void DecompileTestApplication_Program_Plan(struct DecompileTestApplication_MyAnotherProgram*);
除了使用struct
确保单个字是typedef
的别名之外,
你还必须确保每种类型只有一个typedef
。
作为旁注,您的标题保护名称会侵入为实现保留的名称空间(这意味着,对于编写C编译器的人员而言)。不要那样做。一般不要使用以下划线开头的名称,特别是不要以两个下划线或一个下划线和大写字母开头的名称。
在上下文中,这意味着:
#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
#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>
。
答案 1 :(得分:0)
这是C,而不是C ++。声明/定义结构不会创建新的类型名称。因此,第一个文件中的函数声明应该是
void DecompileTestApplication_Program_Plan(struct DecompileTestApplication_MyAnotherProgram);
或者您应该使用typedef:
typedef struct DecompileTestApplication_MyAnotherProgram DecompileTestApplication_MyAnotherProgram;
在这种情况下,您必须在第二个文件中省略typedef
关键字,只需离开
struct XXX.... {
};