gpt4 book ai didi

C2059 对一个函数使用 declspec 宏时出现语法错误;没有它编译得很好

转载 作者:太空宇宙 更新时间:2023-11-04 04:55:57 25 4
gpt4 key购买 nike

我正在创建一个共享库(跨平台),但是在尝试编译 Windows 版本时我遇到了错误:

secure_string.h(43) : error C2059: syntax error : 'type'

这是关于 SECURESTRING_API 宏的。它不会提示 strlcpy 和 strlcat 中的两种用法,但是当尝试将它用于“str_from_last”时,它会生成上述错误。如果我删除它,它可以正常编译,但是该函数不会从 DLL 中导出,这使得它毫无用处!

谷歌搜索未产生任何(相关)结果;有没有人遇到过这个?我已经在 Visual Studio 2008 和 2010 上进行了测试,结果是相同的。源文件包括 string.h 然后是这个文件 - 没有别的。

头文件:

#ifndef SECURE_STRING_H
#define SECURE_STRING_H


/* Provide MS Builds with import/export functionality
* BUILD_SECURE_STRING should be added to project preprocessor macros */
#if _WIN32
# if defined(BUILD_SECURE_STRING)
# define SECURESTRING_API __declspec(dllexport)
# else
# define SECURESTRING_API __declspec(dllimport)
# endif
#else
# define SECURESTRING_API
#endif


/* Windows on the whole, and glibc do not have/support strlc[at|py]
* This will almost certainly need revision for proper cross-platform checks */
#if _WIN32 || __GLIBC__ || !defined(HAVE_STRLCPY)
size_t SECURESTRING_API strlcat(char* dst, const char* src, size_t size);
size_t SECURESTRING_API strlcpy(char* dst, const char* src, size_t size);
#else
# define HAVE_STRLCPY 1
#endif


/* In case the active project has yet to include headers for 'BOOL' */
#ifndef BOOL
# define BOOL int
# define TRUE 1
# define FALSE 0
#endif


/*
| Locates 'search' within 'source', and if found, returns either the
| character itself, or the character after it if 'return_from_after_found'
| is TRUE.
| If it is not found, or any parameter is invalid, a NULL pointer is returned.
*/
char* SECURESTRING_API
str_from_last(char* source,
char search,
BOOL return_from_after_found);



#endif /* SECURE_STRING_H */

最佳答案

#if _WIN32

您确定要输入吗?我会:

#if defined(WIN32)

编辑:看起来不错,但我认为是这样的:将 SECURESTRING_API 移到返回类型 (char*) 之前:

SECURESTRING_API char*

通过此更改,您的代码可以在 VS2010 和 MSDN 下为我编译确认这是必需的顺序:

The decl-specifier-seq should contain, among other things, a base type (e.g. int, float, a typedef, or a class name), a storage class (e.g. static, extern), or the __declspec extension. The init-declarator-list should contain, among other things, the pointer part of declarations.

关于C2059 对一个函数使用 declspec 宏时出现语法错误;没有它编译得很好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7948417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com