错误:在'int'之前预期'=',',',';','asm'或'__attribute__'

时间:2012-05-08 13:16:12

标签: c header-files

在LINUX中编译C程序时,我得到了foll。错误:

stream.h:1123: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int'
stream.h:1124: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'mblk_t'
stream.h:1125: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'mblk_t'

第1123,1124和1125行如下:

__STREAMS_EXTERN int adjmsg(mblk_t *mp, register ssize_t length);
__STREAMS_EXTERN mblk_t *allocb(size_t size, unsigned int priority);
__STREAMS_EXTERN mblk_t *copyb(register mblk_t *mp);

C程序包含一个头文件,该头文件又包含stream.h 知道如何解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

很明显,__STREAMS_EXTERN的定义方式正在搞乱。

如何定义__STREAMS_EXTERN

答案 1 :(得分:1)

您的代码的上下文并不是很清楚,但在我看来,您正在使用OpenSSL库(或者您正在使用该源代码进行复制和粘贴)。

streams_fastcall头文件中定义了kmem.h宏。你加入了它吗?如果你只是做副本和粘贴您只需在STREAMS_EXTERN定义之前添加此行:

#ifndef streams_fastcall
#if defined __i386__ || defined __x86_64__ || defined __k8__
#define streams_fastcall __attribute__((__regparm__(3)))
#else
#define streams_fastcall
#endif
#endif

注意streams_fastcall 声音类似于Microsoft特定(但在Windows上广泛使用)调用名为__fastcall的约定。我猜他们使用了这个名字,因为它使用了 regparm属性指定应该使用寄存器而不是堆栈传递一些参数,这是__fastcall定义的(或者仅仅因为它更快!lol)

答案 2 :(得分:0)

如果错误与任何遗漏无关;或者代码中的类似语法错误,检查对openSSL包含的错误引用。

你的openSSL在/ opt / openssl / include / openssl中包含了err.h和evp.h,你编译的指令是-I。 -L / opt / openssl / lib,-l crypto和-l dl

在.h文件中包含此内容会引发错误:#include(与err.h相同)。

只需用以下内容替换它:#include即可解决它。