Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将函数参数标记为输出_C++_C_Gcc_Attributes_Out - Fatal编程技术网

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;

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 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;
}