【发布时间】:2015-08-25 11:07:42
【问题描述】:
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 in uninitialized in this function”。此外,您必须将 -Wall -O1 传递给 gcc。
void __attribute__((const)) func(int* i)
{
*i = 44;
}
int func2()
{
int myVal; // warning here
func(&myVal);
return myVal;
}
【问题讨论】:
-
你想要指针吗?喜欢
void func(int* i){*i = 44;}(C)? -
C 和 C++ 是不同的语言。在 C++ 中你应该使用引用,在 C 中你只有指针。
-
我需要额外的属性来将 ptr/ref 参数标记为仅输出。我更新了我的问题以说明这一点。
-
我的 g++ does not warn anything 即使带有
-Wall -Wextra -pedantic标志,即使myVal用于func2。我假设您打算将myVal的地址传递给func。 -
已经用
__attribute__((const))对编译器撒了谎,它承诺了函数"does not examine any values except its arguments, and has no effects except the return value",你现在抱怨编译器被谎言愚弄了?
标签: c++ c gcc attributes out