我正在尝试开发一个C应用程序,使用一些我无法修改的库和函数(它们是由其他人提供的)。
这是我出现问题的代码块:
unsigned short errSV;
unsigned short sgdSessFSE;
errSV = SRT_ControleComplet_S(sgdSessFSE);
以下是 SRT_ControleComplet_S 在头文件中的声明方式:
typedef unsigned short (API_ENTRY FARPTR SRT_ControleComplet_S) (unsigned short NumeroSession);
其中 API_ENTRY 和 FARPTR 定义为
#ifndef API_ENTRY
#define API_ENTRY
#endif
#ifndef FARPTR
#define FARPTR *
#endif
编译时出现以下错误:
错误:SRT_ControleComplet_S 之前的预期表达式
我已经遇到过这个问题,因为 ]、} 和其他特殊字符位于错误的位置,但在这里我真的不知道如何修复它。
有人知道我该怎么办吗?
==============更新
嗯,问题几乎自己解决了......显然我得到的 header 不是最后一个版本,所以有人把它给了我。
这是最后一个版本:
typedef unsigned short (API_ENTRY TFCTSRTCONTROLECOMPLET_S)
(unsigned short NumeroSession);
extern TFCTSRTCONTROLECOMPLET_S SRT_ControleComplet_S;
现在有了 extern 就好多了。
感谢您对我的帮助和建议!
最佳答案
这不是一个可以调用的函数,它是一个类型(在 typedef 中指定)。 例如:
typedef int (*foo) (int bar);
int func1 (int bar) {
return bar + bar;
}
int func2 (int bar) {
return bar * bar;
}
int main (void) {
foo f_ptr; // declare a variable
f_ptr = func1; // set variable to func1
f_ptr (10); // returns 20
f_ptr = func2; // set variable to func2
f_ptr (10); // results in 100
}
正如你在上面看到的,“foo”不是一个函数,而是一个函数的类型名。其他全部大写的内容是在某处 #define 的,因为我不知道预处理器用它做什么,所以我无法对其发表评论,只能说它必须至少产生一个星号。
关于C : error: expected expression before âSRT_ControleComplet_Sâ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23130325/