C++ 如何将函数参数标记为输出
C#仅允许将函数参数标记为输出:C++ 如何将函数参数标记为输出,c++,c,gcc,attributes,out,C++,C,Gcc,Attributes,Out,C#仅允许将函数参数标记为输出: void func(out int i) { i = 44; } 是否可以在C/C++中执行类似的操作?这可以改进优化。此外,当变量未初始化,然后作为输出参数传递给函数时,is应消除警告“错误:'myVar'可能在此函数中未初始化使用” 我使用gcc/g++(目前为4.4.7)编译代码 编辑:我知道指针和引用,这不是我要找的。我需要这样的东西: void func(int* __attribute__((out)) i) { *i = 44;
void func(out int i)
{
i = 44;
}
是否可以在C/C++中执行类似的操作?这可以改进优化。此外,当变量未初始化,然后作为输出参数传递给函数时,is应消除警告“错误:'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'可能在未初始化的情况下用于此函数”。另外,您必须将-Wall-O1传递给gcc
void __attribute__((const)) func(int* i)
{
*i = 44;
}
int func2()
{
int myVal; // warning here
func(&myVal);
return myVal;
}
“是否可以在C/C++中执行类似的操作?”
不是真的。标准C++或C不支持这样的输出参数。
在C++中,可以使用引用参数来获取/输出语义:
void func(int& i) {
// ^
i = 44;
}
对于c,您需要一个指针,以执行相同的操作:
void func(int* i) {
// ^
*i = 44;
// ^
}
请注意,
out
和in&out
参数之间没有区别,除非您使用const
参考(仅表示输入):
当你想在C++中传递一个ARG作为输出时,你把它作为一个引用传递:< /P>
void func(int &i)
{
i = 44;
}
您必须在对其执行任何操作之前对其进行初始化
注:
您可以指定何时希望arg只是一个带有cont ref的输入:
void func(const int &i)
{
i = 44;
}
你想要指针吗?如<代码>虚空FUNC(int *i){*i=44;}(c)?c和C++是不同的语言。在C++中,你应该使用引用,在C中只有指针。我需要附加属性来标记PTR/RF参数。我更新了我的问题以说明这一点。我的g++即使带有
-Wall-Wextra-pedantic
标志,即使myVal
用于func2
。我假设您打算将myVal
的地址传递到func
中。使用\uuuuu属性(const))
向编译器撒谎,这保证函数,您现在抱怨编译器被谎言愚弄了?请注意,out
和in&out
参数之间没有区别。除非您使用const
,如另一个答案所述;)我需要额外的属性来将ptr/ref参数标记为out only。我更新了我的问题,损坏了这个损坏。“Daielelfu yys滑雪”我需要附加属性来标记PTR/REF参数。“你根本不能在标准C++或C中知道。我在寻找一些非标准的,可能是GCC唯一的扩展。我需要附加的属性来标记PTR/REF参数。我更新了我的问题来说明这一点。你不能,你只能指定一个输入,而不能只指定一个输出
void func(const int &i)
{
i = 44;
}