C#只允许将函数参数标记为输出:
void func(out int i)
{
i = 44;
}
字符串
在C/C中有没有可能做类似的事情?这可以提高优化。另外,当变量没有初始化并作为输出参数传递给函数时,应该静音警告“错误:'myVar'可能在此函数中未初始化使用”。
我使用gcc/g(目前是4.4.7)来编译我的代码。
**编辑:**我知道指针和引用,这不是我在寻找什么.我需要这样的东西:
void func(int* __attribute__((out)) i)
{
*i = 44;
}
void func2()
{
int myVal; // gcc will print warning: 'myVar' may be used uninitialized in this function
func(&myVal);
//...
}
型
**编辑2:**需要一些额外的代码来重现警告“'myVar' may be used uninitialized in this function”。此外,您必须将-Wall -O 1传递给gcc。
void __attribute__((const)) func(int* i)
{
*i = 44;
}
int func2()
{
int myVal; // warning here
func(&myVal);
return myVal;
}
型
3条答案
按热度按时间cgyqldqp1#
不完全是。标准的c或c不支持这样的输出唯一参数。
在C中,你可以使用一个引用参数来获取/输出语义:
字符串
对于c,你需要一个指针,来做同样的事情:
型
请注意,
out
和in&out
参数之间没有区别,除非您使用const
引用(这意味着仅输入):型
sqyvllje2#
当你想在C++中传递一个arg作为输出时,你可以将它作为引用传递:
字符串
你必须在对它做任何事情之前对它进行初始化。
型
qlckcl4x3#
正如其他人所指出的,你可以使用指针或引用来传递参数。但是没有办法注解它是in,out还是in/out。
字符串
Microsoft扩展名
如果使用MSVC,Microsoft Source-code Annotation Language (SAL)可以提供这样的注解,并执行编译时静态分析,以强制调用者正确使用。
型