编译C文件时出现有趣的错误消息

Alb*_*ore 2 c compilation

嗯,我对C有点新,所以我想知道为什么在编译这行时它会给我以下错误信息:

   void (ESCALLBACK *drawFunc) ( void* );
   void (ESCALLBACK *keyFunc) ( void*, unsigned char, int, int );
Run Code Online (Sandbox Code Playgroud)

对于第一行,它给了我:

  error: expected ‘)’ before ‘*’ token
Run Code Online (Sandbox Code Playgroud)

而对于第二个:

  error: expected ‘;’ before ‘void’
Run Code Online (Sandbox Code Playgroud)

我很可能没有给你足够的信息,但目前我想知道为什么会打印这样的错误信息.我的意思是,他们看起来并不是很有帮助,我认为他们甚至没有接近真正的问题.

对不起,如果我听起来很傻,我是一个Java开发学习C.

谢谢!

Rup*_*Rup 5

这可能意味着ESCALLBACK没有被定义,并且它错误地排除了其余部分(因此给你一个无用的错误).

确保包含定义ESCALLBACK的标头.

  • 对 - 是的,这是有道理的.Windows在其API中使用调用约定的混合,例如`__cdecl` C-style(调用者清除堆栈中的参数),`__stdcall` Pascal-style(被调用者清理),`__ fastcall` some regs`__thiscall`C++ ecx = this等. Linux通常不会 - 每个人都使用cdecl,它实际上是默认的.所以我建议你只需#define ESCALLBACK和ESUTIL_API,或者删除它们.确切的GCC等价物是`__attribute __((cdecl))`但这是默认的调用约定,因此更容易省略它. (2认同)