在 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'
第 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 知道如何解决这个问题吗?
最佳答案
您的代码的上下文并不是很清楚,但在我看来您正在使用 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
听起来 类似于名为 __fastcall
的 Microsoft 特定(但在 Windows 上广泛使用)调用约定.我猜他们使用那个名字是因为它使用
regparm
属性指定一些参数应该使用寄存器而不是堆栈传递,这就是 __fastcall
定义的(或者仅仅是因为它更快!大声笑)
关于c - 错误 : expected '=' , ','、 ';'、 'asm' 或 '__attribute__' 之前的 'int',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10499389/