如何将函数参数标记为输出
How to mark function argument as output
C# 允许将函数参数标记为仅输出:
void func(out int i)
{
i = 44;
}
是否可以在 C/C++ 中做类似的事情?这可以改进优化。此外,当变量未初始化然后作为输出参数传递给函数时,应该消除警告 "error: 'myVar' may be used uninitialized in this function"。
我使用 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' 可能在此函数中使用未初始化的”。此外,您必须将 -Wall -O1 传递给 gcc。
void __attribute__((const)) func(int* i)
{
*i = 44;
}
int func2()
{
int myVal; // warning here
func(&myVal);
return myVal;
}
"Is it possible to do something similar in C/C++?"
不是真的。标准 c++ 或 c 不支持诸如仅输出参数之类的东西。
在 C++ 中,您可以使用引用参数来获得 in/out 语义:
void func(int& i) {
// ^
i = 44;
}
对于 c 你需要一个指针,做同样的事情:
void func(int* i) {
// ^
*i = 44;
// ^
}
请注意,out
和 in&out
参数之间没有区别,除非您使用 const
引用(这意味着仅输入):
void func(const int& i) {
// ^^^^^
i = 44;
}
当您想在 C++ 中将 arg 作为输出传递时,您将其作为引用传递:
void func(int &i)
{
i = 44;
}
并且您必须在对其进行任何操作之前对其进行初始化。
注 :
您可以指定何时希望 arg 只是一个 input with a const ref :
void func(const int &i)
{
i = 44;
}
C# 允许将函数参数标记为仅输出:
void func(out int i)
{
i = 44;
}
是否可以在 C/C++ 中做类似的事情?这可以改进优化。此外,当变量未初始化然后作为输出参数传递给函数时,应该消除警告 "error: 'myVar' may be used uninitialized in this function"。
我使用 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' 可能在此函数中使用未初始化的”。此外,您必须将 -Wall -O1 传递给 gcc。
void __attribute__((const)) func(int* i)
{
*i = 44;
}
int func2()
{
int myVal; // warning here
func(&myVal);
return myVal;
}
"Is it possible to do something similar in C/C++?"
不是真的。标准 c++ 或 c 不支持诸如仅输出参数之类的东西。
在 C++ 中,您可以使用引用参数来获得 in/out 语义:
void func(int& i) {
// ^
i = 44;
}
对于 c 你需要一个指针,做同样的事情:
void func(int* i) {
// ^
*i = 44;
// ^
}
请注意,out
和 in&out
参数之间没有区别,除非您使用 const
引用(这意味着仅输入):
void func(const int& i) {
// ^^^^^
i = 44;
}
当您想在 C++ 中将 arg 作为输出传递时,您将其作为引用传递:
void func(int &i)
{
i = 44;
}
并且您必须在对其进行任何操作之前对其进行初始化。
注 : 您可以指定何时希望 arg 只是一个 input with a const ref :
void func(const int &i)
{
i = 44;
}