require(length > offsetof(struct blob,cert),outLabel);
第一个错误是:
错误:C99中函数’require’的隐式声明无效
我也遇到了很多错误:使用未声明的标识符’outLabel’.这是在RRTransactionVerifier.m中,这是用于处理收据验证的Apple代码.
解决方法
原因记录在该头文件中:
For time immemorial,Mac OS X has defined version of most of these
macros without the __ prefix,which could collide with similarly named
functions or macros in user code,including new functionality in Boost
and the C++ standard library.macOS High Sierra and iOS 11 will now require that clients move to the
new macros as defined above.If you would like to enable the macros for use within your own
project,you can define the
__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERscoreS macro via an Xcode Build Configuration. See “Add a build configuration (xcconfig) file”
in Xcode Help.
因此,要解决此问题,您可以设置定义或更改代码以使用新宏.
require现在是__Require,require_noerr现在是__Require_noErr,依此类推.它们在头文件中提供了有关如何通过脚本更改代码的脚本:
编辑:在脚本的第一行末尾添加一个反斜杠,否则终端会将命令分成两个.
/* To aid users of these macros in converting their sources,the following tops script will convert usages of the old macros into the new equivalents. To do so,in Terminal go into the directory containing the sources to be converted and run this command. find . -name '*.[c|cc|cp|cpp|m|mm|h]' -print0 | xargs -0 tops \ -verbose \ replace "check(<b args>)" with "__Check(<args>)" \ replace "check_noerr(<b args>)" with "__Check_noErr(<args>)" \ replace "check_noerr_string(<b args>)" with "__Check_noErr_String(<args>)" \ replace "check_string(<b args>)" with "__Check_String(<args>)" \ replace "require(<b args>)" with "__Require(<args>)" \ replace "require_action(<b args>)" with "__Require_Action(<args>)" \ replace "require_action_string(<b args>)" with "__Require_Action_String(<args>)" \ replace "require_noerr(<b args>)" with "__Require_noErr(<args>)" \ replace "require_noerr_action(<b args>)" with "__Require_noErr_Action(<args>)" \ replace "require_noerr_action_string(<b args>)" with "__Require_noErr_Action_String(<args>)" \ replace "require_noerr_string(<b args>)" with "__Require_noErr_String(<args>)" \ replace "require_string(<b args>)" with "__Require_String(<args>)" \ replace "verify(<b args>)" with "__Verify(<args>)" \ replace "verify_action(<b args>)" with "__Verify_Action(<args>)" \ replace "verify_noerr(<b args>)" with "__Verify_noErr(<args>)" \ replace "verify_noerr_action(<b args>)" with "__Verify_noErr_Action(<args>)" \ replace "verify_noerr_string(<b args>)" with "__Verify_noErr_String(<args>)" \ replace "verify_string(<b args>)" with "__Verify_String(<args>)" \ replace "ncheck(<b args>)" with "__nCheck(<args>)" \ replace "ncheck_string(<b args>)" with "__nCheck_String(<args>)" \ replace "nrequire(<b args>)" with "__nRequire(<args>)" \ replace "nrequire_action(<b args>)" with "__nRequire_Action(<args>)" \ replace "nrequire_action_quiet(<b args>)" with "__nRequire_Action_Quiet(<args>)" \ replace "nrequire_action_string(<b args>)" with "__nRequire_Action_String(<args>)" \ replace "nrequire_quiet(<b args>)" with "__nRequire_Quiet(<args>)" \ replace "nrequire_string(<b args>)" with "__nRequire_String(<args>)" \ replace "nverify(<b args>)" with "__nVerify(<args>)" \ replace "nverify_string(<b args>)" with "__nVerify_String(<args>)" \ replace "require_action_quiet(<b args>)" with "__Require_Action_Quiet(<args>)" \ replace "require_noerr_action_quiet(<b args>)" with "__Require_noErr_Action_Quiet(<args>)" \ replace "require_noerr_quiet(<b args>)" with "__Require_noErr_Quiet(<args>)" \ replace "require_quiet(<b args>)" with "__Require_Quiet(<args>)" \ replace "check_compile_time(<b args>)" with "__Check_Compile_Time(<args>)" \ replace "debug_string(<b args>)" with "__Debug_String(<args>)" */