return + 1是什么意思here
return + 1
DWORD WINAPI GetModuleFileName( __in_opt HMODULE hModule, __out_ecount_part(nSize, return + 1) LPTSTR lpFilename, __in DWORD nSize );
字符串
m1m5dgzv1#
它的意思是“比调用返回的值多一个”。__out_ecount_part注解希望它的 length 表达式包含NUL终止符,而GetModuleFileName返回值不包含终止符,因此+1来解决差异。如果函数成功,则返回值是复制到缓冲区的字符串的长度,以字符为单位,不包括终止空字符。
__out_ecount_part
GetModuleFileName
+1
ltskdhd12#
在“C”中,所有字符串都以“\0”结尾。所以+1允许在文件名的末尾添加额外的'\0'
roqulrg33#
SAL注解通常被构建为基元的组合。__out_ecount_part具体地表示函数通过(_out)写入输出的参数。索引索引到元素中,而不是字节(_ecount),并且该函数只写入部分缓冲区(_part)。注解中的最后两个参数表示缓冲区的总大小和初始化长度(返回时)。总大小很简单,因为该值有一个名称(nSize)。然而,初始化的长度是函数的返回值,它没有名称。SAL使用return来引用它。因此,return + 1声明,在返回时,缓冲区已经从开始填充到(但不包括)超过函数返回值的索引。+ 1表示零终止符,这是C中字符串最常见的编码。请注意,SAL注解仅由静态代码分析器工具评估。这些对C或C++编译器都没有意义。SAL注解被实现为预处理器宏,并在预处理期间被完全清除。这允许使用其他保留关键字(例如return)。
_out
_ecount
_part
nSize
return
+ 1
3条答案
按热度按时间m1m5dgzv1#
它的意思是“比调用返回的值多一个”。
__out_ecount_part
注解希望它的 length 表达式包含NUL终止符,而GetModuleFileName
返回值不包含终止符,因此+1
来解决差异。如果函数成功,则返回值是复制到缓冲区的字符串的长度,以字符为单位,不包括终止空字符。
ltskdhd12#
在“C”中,所有字符串都以“\0”结尾。所以+1允许在文件名的末尾添加额外的'\0'
roqulrg33#
SAL注解通常被构建为基元的组合。
__out_ecount_part
具体地表示函数通过(_out
)写入输出的参数。索引索引到元素中,而不是字节(_ecount
),并且该函数只写入部分缓冲区(_part
)。注解中的最后两个参数表示缓冲区的总大小和初始化长度(返回时)。总大小很简单,因为该值有一个名称(
nSize
)。然而,初始化的长度是函数的返回值,它没有名称。SAL使用return
来引用它。因此,
return + 1
声明,在返回时,缓冲区已经从开始填充到(但不包括)超过函数返回值的索引。+ 1
表示零终止符,这是C中字符串最常见的编码。请注意,SAL注解仅由静态代码分析器工具评估。这些对C或C++编译器都没有意义。SAL注解被实现为预处理器宏,并在预处理期间被完全清除。这允许使用其他保留关键字(例如
return
)。