问题标签 [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.

0 投票
1 回答
396 浏览

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

提前谢谢了。

0 投票
0 回答
205 浏览

sal - 为什么静态代码分析中没有拒绝这个简单的注释示例?

我正在使用 SAL 来确保创建对象的所有代码路径都X应该X::work()在销毁它之前调用。

当我删除x.work()时,会出现预期的错误:

warning C28020: The expression 'this->worked' is not true at this call.

但是,当我添加work()一个对象x时,另一个对象y似乎也通过了测试。我的注释有问题吗?

0 投票
1 回答
163 浏览

c++ - 配置 Doxygen 以忽略源代码注释语言 (SAL)

我有一些用 Doxygen 记录的类。此外,它们还使用 Microsoft 的源代码注释语言 (SAL) 进行注释,以支持静态代码分析。

在这种情况下,Doxygen 会报告一个警告:

在 Foo::_Success_(return==Success)=0 的参数列表中找不到命令 @param 的参数“pResult”

所以,Doxygen 被注解语句弄糊涂了_Success_()。如何在 _Success_(return == Success) 不给源文件添加混乱的情况下隐藏 Doxygen 的返回值注释?这可以完成工作,但看起来太冗长:

这可以通过配置 Doxygen 并保持源代码不变来实现吗?

0 投票
1 回答
674 浏览

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 在这方面可能更好吗?或者有没有可以更好地做到这一点的工具?

如果它真的很糟糕:这是一个已知问题吗?是否有计划改进这种类型的分析?

相关:Visual Studio 2013 静态代码分析 - 它有多可靠?

0 投票
0 回答
114 浏览

c++ - SAL Annotations 会触发编译器报错吗?

我正在学习 SAL 注释,我在 Visual Studio 2017 中测试了这个示例。

我认为当我将 NULL 指针传递给时编译器会报告警告或错误InCallee,但是,它仍然可以正确构建。所以我的问题是 SAL 是否就像代码注释一样并且不会验证数据的合法性,或者它可以检查数据,只是因为我做错了什么?

0 投票
1 回答
201 浏览

c++ - MSVC SAL 与 C++2a 合同

在MSVC中,有SAL特性,可以用来描述参数,结果等,效果很好,可移植性也不错,C++2a Contract特性好像也是这样,谁能给点他们之间的区别?

0 投票
1 回答
814 浏览

c++ - 为什么 _Printf_format_string_ 宏不产生任何警告?

在下面的代码片段中,MyFormat() 调用中格式说明符的错误使用会根据 SAL 规范产生警告,如果我取消注释 printf() 的相同调用,我真的会收到所有这些警告,但我的代码是即使使用 /W4 也可以静默编译。我究竟做错了什么?我正在使用 MSVC 2017 15.9.7 社区版。

0 投票
1 回答
464 浏览

security - SAP 安全审计日志 (SAL) 是否加密?

经过数小时的谷歌搜索,我仍然找不到答案。请一些 SAP 专家告诉我:SAP SAL 是否可以作为加密文件生成,或者它们是否没有加密?

例如,是否可以使用 3rd 方工具或 python / java 等中的一些编码来解析审计日志文件?

我的问题的背景是 IT 合规性。我试图了解是否有必要加密 SAP SAL 日志档案(以防它们不安全)。

谢谢。

0 投票
0 回答
80 浏览

c - 声明使用 SAL 定义类型的宏时出现错误 C2059 (?)

我继承了一些代码,有问题的代码构建(对于我无法访问的人,在某种程度上是旧版本的 VS。)我正在尝试将它迁移到 VS2019。

我不断收到的一个错误是:错误 C2059 语法错误:'[' At: \CodeAnalysis\SourceAnnotations.h 290

有问题的用途是:

如果我按如下方式修改 x_sprintf ,它就可以工作(通过工作,我的意思是一行的错误消失了。)

一个问题是,这个 F_PRINT 被全部使用了,所以我宁愿不去改变它(至少现在还没有)。另外,我知道它是在某个时候构建的(没有进行任何更改)这一事实意味着错误大多数与我的环境。也许我缺少一些编译器命令标志?

也许某些 SAL 格式被贬低了,至少如果在宏上使用?如果是这样,我应该如何重新格式化?

0 投票
1 回答
777 浏览

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 配置文件中的配置设置?
还是SALDoxygen只是不兼容?