C 错误:预期为'='''''';asm&x27;或'__属性';在'之前;int';

C 错误:预期为'='''''';asm&x27;或'__属性';在'之前;int';,c,header-files,C,Header Files,在LINUX中编译C程序时,我得到了以下信息。错误: 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'

在LINUX中编译C程序时,我得到了以下信息。错误:

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'
第11231124行和第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
你知道如何解决这个问题吗?

很明显,
\uu STREAMS\u EXTERN
的定义方式会把事情搞砸


\uuuu STREAMS\u EXTERN
是如何定义的?

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

streams\u fastcall
宏在
kmem.h
头文件中定义。包括在内了吗?如果您只是在进行复制和粘贴,只需在
STREAMS\u 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\u fastcall
听起来像是Microsoft特有的(但在Windows上广泛使用的)调用约定,名为
\u fastcall
。我猜他们使用这个名字是因为它使用
regparm
属性指定一些参数应该使用寄存器而不是堆栈传递,这就是
\uu fastcall
定义的(或者仅仅因为它更快!lol)

以防错误与任何缺失无关;如果代码中存在类似的语法错误,请检查对openSSL包含的错误引用

使用openSSL在/opt/openSSL/include/openSSL中包含err.h和evp.h,编译的指令是-I.-L/opt/openSSL/lib、-L crypto和-L dl

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


只需将其替换为include:#include即可解决此问题。

请注意,您的终端似乎没有配置正确的unicode(linux上通常为UTF-8)。所以
字符实际上应该是引号。让信息更具可读性。谢谢Evan。我现在已经用UTF-8配置了我的putty,现在显示为引号#endif@Tinyspark编译器不懂streams\u fastcall
,似乎是Windows的东西。Daniel,我不明白你说的“窗户的东西”是什么意思。另外,我正在Linux环境中编译代码。@Adriano谢谢,所以这是另外一天;)你好,Adrino,是的,我已经包含了kmem.h文件。来自库本身的头应该是可以的,所以我想你在包含的顺序上做了一些错误的事情。检查是否包含在“stream.h”之前