Linux上的C代码编译错误

时间:2012-07-04 13:24:43

标签: c++ linux

somefile.h的内容:

#ifndef __SOMEFILE_H
#define __SOMEFILE_H

#ifdef __cplusplus
extern "C" {
#endif

typedef struct _table_t
{
     void (*somefunction1)();
     void (*somefunction2)(int a);
     void (*somefunction3)(int a, int *b);
}table_t;

void doSomething1();
void doSomething2();

#ifdef __cplusplus
} // error at this line: expected constructor, destructor, or type conversion before '(' token
#endif
#endif

上面显示的是代码片段以及我在Linux上编译代码时出现的错误。相同的代码在Windows上编译良好,没有任何抱怨。请帮我解决这个问题。我在互联网上搜索了很多,但未能找到正确的解决方案。谢谢。

关于源文件:

all.h is a header file which includes:
#include "header1.h"
#include "header2.h"
#include "header3.h"
#include "somefile.h"

这是somefile.c的内容

#include "all.h" 
#include "header4.h"
jumptable_t jumptable_a = 
{
       a_function1();
       a_function2(int a);
       a_function3(int a, int *b);
}

//more code
void function1()
{
     a_function1();
}

void function2(int a)
{
    a_function2(a);
}

void function3(int a, int *b)
{
    a_function3(a, b);
}


void doSomething1()
{

}
void doSomething2()
{

}

2 个答案:

答案 0 :(得分:1)

具有前导双下划线的宏是非法的。你需要改变你的包含守卫。

答案 1 :(得分:0)

; }之后需要jumptable_a。并在jumptable_a的初始值设定项中使用逗号而不是分号。

大括号让它看起来像是一个有点像功能的东西,但它不是。

此外,在somefile.h中,结构称为table_t,但在somefile.c中您使用jumptable_t,我认为这是在此处撰写帖子时引入的错误。