WEB开发网
开发学院软件开发C++ C++代码安全增强与标准注解语言SAL 阅读

C++代码安全增强与标准注解语言SAL

 2010-11-11 15:21:55 来源:WEB开发网   
核心提示:#define _Pre3_impl_(p1,p2,p3) [SA_Pre(p1,p2,p3)]<BR> #define _Deref_pre1_impl_(p1) [SA_Pre(Deref=1,p1)]<BR> #define _Post_
#define _Pre3_impl_(p1,p2,p3)              [SA_Pre(p1,p2,p3)]<BR>

 
#define _Deref_pre1_impl_(p1)              [SA_Pre(Deref=1,p1)]<BR>

 
#define _Post_z_                        _Post1_impl_(_$zterm) _Deref_post1_impl_(_$valid)<BR>

 
<BR>

 
#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1(_ReturnType, _FuncName, _DstType, _Dst, _TType1, _TArg1) \
    extern "C++" \
    { \
    template <size_t _Size> \
    inline \
    _ReturnType __CRTDECL _FuncName(_DstType (&_Dst)[_Size], _TType1 _TArg1) \
    { \
        return _FuncName(_Dst, _Size, _TArg1); \
    } \
    }

#define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) \
    __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _FuncName##_s, _DstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1)

#define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) \
    __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _FuncName##_s, _DstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1)

#define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) \
    _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec _ReturnType __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1);

//输出的提示信息在这儿,没错就是它
#define _CRT_INSECURE_DEPRECATE(_Replacement) _CRT_DEPRECATE_TEXT("This function or variable may be unsafe. Consider using " #_Replacement " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.")

#define _CRT_DEPRECATE_TEXT(_Text) __declspec(deprecated(_Text))

#define __RETURN_POLICY_DST(_FunctionCall, _Dst) return ((_FunctionCall) == 0 ? _Dst : 0)

#define __EMPTY_DECLSPEC

 

看着让人叹为观止的宏我们来说说其重点,[SA_Pre(p1)]这种元语言语法和C#的元语言语法类似,没找到任何关于它的说明(有谁知道麻烦告诉我一声),别一种用法是 __declspec("SAL_pre"),这个容易理解就是一个标准的编译器扩展。类似的扩展支持多少?同样也没有看到文档说,不过不必担心,使用SAL的时候永远不会直接用到的它的。关于SAL的使用微软官方有两篇文档进行了介绍,这个是介绍vs2010的http://msdn.microsoft.com/en-us/library/ms235402.aspx

Tags:代码安全 增强 标准注解 SAL

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接