如何将函数参数标记为输出

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

请注意,outin&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;
}