问题标签 [sal]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++ source_annotation_attribute
在浏览开源.NET Framework 4.7的源代码时,我偶然发现了 C++ 标头sal.h
,发现一行代码[source_annotation_attribute( SA( Method ) )]
似乎与C#中的属性和AttributesUsage
类相似。
现在我知道,一般来说, C++ 中没有像 C# 中那样的用户定义属性,我的第一个猜测是这[source_annotation_attribute( SA( Method ) )]
只是一个宏,但它既没有在任何其他头文件中定义,sal.h
也没有在任何其他头文件中定义,因为sal.h
没有#include
。
我的下一个猜测是它[source_annotation_attribute]
实际上是内置在 MSVC 中的,就像例如[[noreturn]]
属性一样。
如果有人可以阐明它的实际含义,如果我可以声明自己的类似属性,如果它没有内置到编译器中,我会很高兴。如果您想亲自查看,则特定文件是\Source\externalapis\legacy\vctools\vc12\inc\vc\sal.h
并且该属性(以及其他)出现在 line 中1934
。
下面是一个使用示例sal.h
:
提前谢谢了。
sal - 为什么静态代码分析中没有拒绝这个简单的注释示例?
我正在使用 SAL 来确保创建对象的所有代码路径都X
应该X::work()
在销毁它之前调用。
当我删除x.work()
时,会出现预期的错误:
warning C28020: The expression 'this->worked' is not true at this call.
但是,当我添加work()
一个对象x
时,另一个对象y
似乎也通过了测试。我的注释有问题吗?
c++ - 配置 Doxygen 以忽略源代码注释语言 (SAL)
我有一些用 Doxygen 记录的类。此外,它们还使用 Microsoft 的源代码注释语言 (SAL) 进行注释,以支持静态代码分析。
在这种情况下,Doxygen 会报告一个警告:
在 Foo::_Success_(return==Success)=0 的参数列表中找不到命令 @param 的参数“pResult”
所以,Doxygen 被注解语句弄糊涂了_Success_()
。如何在
_Success_(return == Success)
不给源文件添加混乱的情况下隐藏 Doxygen 的返回值注释?这可以完成工作,但看起来太冗长:
这可以通过配置 Doxygen 并保持源代码不变来实现吗?
c++ - 使用 SAL 注释的 Visual Studio Community 代码分析质量
我希望这个问题不会超出 SO 的范围;如果是(在那种情况下很抱歉),请告诉我它属于哪里,我会尝试将它移到那里。
在 C/C++ 中用于静态代码分析的SAL 注释的概念对我来说似乎非常有用。以 MSDN 上错误实现的wmemcpy
示例为例:Understanding SAL:
MSDN 说“代码分析工具可以通过单独分析这个函数来捕获错误”,这看起来很棒,但问题是当我将此代码粘贴到 VS 2017 社区时,代码分析中不会弹出关于此的警告,即使使用启用所有分析警告。(其他类似的警告C26481 Don't use pointer arithmetic. Use span instead (bounds.1).
。)
另一个应该产生警告的例子(至少根据对What is the purpose of SAL(Source Annotation Language)以及 SAL 1 和 2 有什么区别? )的回答,但没有:
还有一个不正确警告的情况:
result
显然标有_Out_
and not_In_
或_Inout_
因此此警告在这种情况下没有意义。
我的问题是:为什么 Visual Studio 的基于 SAL 的代码分析看起来很糟糕;我错过了什么吗?Visual Studio Professional 或 Enterprise 在这方面可能更好吗?或者有没有可以更好地做到这一点的工具?
如果它真的很糟糕:这是一个已知问题吗?是否有计划改进这种类型的分析?
c++ - SAL Annotations 会触发编译器报错吗?
我正在学习 SAL 注释,我在 Visual Studio 2017 中测试了这个示例。
我认为当我将 NULL 指针传递给时编译器会报告警告或错误InCallee
,但是,它仍然可以正确构建。所以我的问题是 SAL 是否就像代码注释一样并且不会验证数据的合法性,或者它可以检查数据,只是因为我做错了什么?
c++ - MSVC SAL 与 C++2a 合同
在MSVC中,有SAL特性,可以用来描述参数,结果等,效果很好,可移植性也不错,C++2a Contract特性好像也是这样,谁能给点他们之间的区别?
c++ - 为什么 _Printf_format_string_ 宏不产生任何警告?
在下面的代码片段中,MyFormat() 调用中格式说明符的错误使用会根据 SAL 规范产生警告,如果我取消注释 printf() 的相同调用,我真的会收到所有这些警告,但我的代码是即使使用 /W4 也可以静默编译。我究竟做错了什么?我正在使用 MSVC 2017 15.9.7 社区版。
security - SAP 安全审计日志 (SAL) 是否加密?
经过数小时的谷歌搜索,我仍然找不到答案。请一些 SAP 专家告诉我:SAP SAL 是否可以作为加密文件生成,或者它们是否没有加密?
例如,是否可以使用 3rd 方工具或 python / java 等中的一些编码来解析审计日志文件?
我的问题的背景是 IT 合规性。我试图了解是否有必要加密 SAP SAL 日志档案(以防它们不安全)。
谢谢。
c - 声明使用 SAL 定义类型的宏时出现错误 C2059 (?)
我继承了一些代码,有问题的代码构建(对于我无法访问的人,在某种程度上是旧版本的 VS。)我正在尝试将它迁移到 VS2019。
我不断收到的一个错误是:错误 C2059 语法错误:'[' At: \CodeAnalysis\SourceAnnotations.h 290
有问题的用途是:
如果我按如下方式修改 x_sprintf ,它就可以工作(通过工作,我的意思是一行的错误消失了。)
一个问题是,这个 F_PRINT 被全部使用了,所以我宁愿不去改变它(至少现在还没有)。另外,我知道它是在某个时候构建的(没有进行任何更改)这一事实意味着错误大多数与我的环境。也许我缺少一些编译器命令标志?
也许某些 SAL 格式被贬低了,至少如果在宏上使用?如果是这样,我应该如何重新格式化?
c++ - 在 Doxygen 中使用 Microsoft 的源代码注释语言 (SAL)?
我正在尝试使用Doxygen记录一些使用 Microsoft 的Source-Code Annotation Language (SAL)的 C++ 代码。但是,Doxygen 不能_Success_
正确解析某些注释宏,例如 . 在示例函数注释的情况下,_Success_
Doxygen 将此宏误解为函数头/原型。
以以下包含函数注释标记的示例为例:
对于上面的示例,Doxygen 将解释_Success_()
为函数头/原型,从而创建绝对错误的文档。这是带有和不带有函数注释的HTML Doxygen 输出的样子:
使用函数注释,Doxygen 还说我记录了一个i
不属于参数列表的参数变量:
C:/.../Source.cpp:9: 警告:在Success (return)的参数列表中找不到命令 @param 的参数 'i'
我是否缺少主Doxygen 配置文件中的配置设置?
还是SAL和Doxygen只是不兼容?