首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数参数

函数参数
EN

Stack Overflow用户
提问于 2012-01-14 03:13:32
回答 6查看 491关注 0票数 3

我不明白为什么这段代码是工作的。

代码语言:javascript
复制
int f(int,int);

int main()
{
    f(12,21);
    return 0;
}

int f(int,int b)
{
    return 0;
}

如何在函数f(...)中使用第一个参数?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-01-14 03:16:14

参数名不是函数签名的一部分,只有它的名称和参数的类型才是。

因此,不给参数命名是完全合法的。但是,您不能使用它们。(当然,除非你做了一些黑客行为)

注意一些黑客行为:-不是平台独立的,不是标准所保证的,而是有趣的:)

代码语言:javascript
复制
void foo (int x, int, int z)
{
   int* pz = &z;
   int y = *(--pz);
   cout << x << " " << y << " " << z;
}

int main()
{
    foo(2,3,4);
    // prints "2 3 4"
}

这在我的Win7和MSVS2008上都能用。代码依赖于参数在函数参数堆栈上的推送方式。

在生产代码中,您应该对所有参数使用名称,包括在声明中,并使它们尽可能具有描述性。

票数 9
EN

Stack Overflow用户

发布于 2012-01-14 03:15:46

你不能。除非你给它起个名字。但是你没有在这个函数中使用任何。

通常,参数的名称会被省略,以避免出现未使用的警告。在f函数中,您可能会收到关于未使用b的警告,但不是第一个参数。

票数 6
EN

Stack Overflow用户

发布于 2012-01-14 03:17:29

不能使用f(...)的第一个参数。缺少的变量名告诉编译器您明确希望忽略此参数。

虽然乍一看这可能看起来不是很有用,但当你必须遵循一个api (例如,由于虚方法)并且你的函数根本不关心它从调用者那里得到的所有东西时,它实际上是非常有用的。

简单的例子:

代码语言:javascript
复制
class Painter {
public:
   virtual void paint( Object o, viewscreen * screen ) = 0;
};

class WindowPainter {
public:
   virtual void paint( Object o, viewscreen * screen ) {
   ...
   }
};

class ConsolePainter {
public:
   // The console is available as std::cout globaly
   // often the name is just put in comments, to reference the common api  
   virtual void paint( Object o, viewscreen * /* screen */) {
   ...
   }
};
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8855922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档