问题标签 [function-declaration]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
68 浏览

c++ - 如何区分函数的声明和使用?

我在代码中有以下结构:

我无法理解什么aaa::bbb::ccc some_name(。如果是函数调用,为什么要指定它的时间aaa::bbb::ccc。如果它是一个函数的声明,为什么它在while循环中完成,为什么没有指定参数的类型?

0 投票
2 回答
1496 浏览

c++ - C++ 内联函数可以调用稍后在标头中声明的函数吗?

以下在 MSVC2008 和 MSVC2010 中运行良好

是的,这有点奇怪:FuncA()调用FuncB(),即使(当时)FuncB()尚未声明。但是,MSVC2008 和 MSVC2010 认为这很好。

显然,gcc不认为这很好—— FuncB was not declared in this scope

ISSUE: 我有一堆这些,声明它们然后定义它们会很“痛苦”。此外,很难正确地“排序”它们,因此每个函数都只在声明后调用函数。 但是,我猜我需要先声明,然后再定义?

这些函数是不是模板,还是在模板类中定义的规则是否不同?

具体来说,我注意到微软非常“后期编译”,它接受大量相互耦合的代码,并且稍后解析(在编译时,当模板参数化被触发时),而现在gcc似乎想要编译它“看到”代码(正确性的初始传递,并在参数化/调用期间再次传递)。

(当我们将 Microsoft 代码移植到 Linux/gcc 时,就会出现这个问题。)

===更新===

以下是我们拥有的“替代”场景(在此代码移植工作中),您的答案会根据其中任何一个而改变吗?

...和:

===更新+2===

感谢您的评论,其中共识似乎这是有效的 C++ 代码,并且应该可以工作(正如@Adam 建议的那样,函数“defined-inline”应该表现得好像它是在类之后定义的,并且应该能够调用定义的函数在内联定义之后的类接口中)。

更多信息:

是的,我确实从FuncA()内联实现的第一个示例中遇到了这个编译错误:

...使用:

(回想一下,这适用于 MSVC2008/MSVC2010)。

我现在意识到我的代码示例(上面)是不够的(上面的例子没有显示这个错误gcc),这里有一些更多的细节:

  • Foo有一个基类(我认为这不重要)
  • Foo定义一个通过这些函数传递的内部enum(我认为这不重要)
  • 这些功能通过宏“扩展”(我认为很重要——见下文)
  • 这些功能中有五十六 (56) 个(我认为很重要——见下文)

一个更完整的代码示例将是(我对此并不感到自豪):

代码意图:FooParent类具有旨在由(许多)派生类“共享”的实现。派生类定义它们自己的enum值。使用这些enum值的函数是通过宏实现的(因为FooParent不是 a template<>,并且不能依赖于派生的enum- )。

奇怪的行为:

  • 如果FooA(){FooB();}嵌套仅通过“几行”引用“稍后”定义的函数,则gcc可以正常编译。但是,如果尚未声明的函数要晚得多,例如Foo2(){Foo53();},则gcc断定它Foo53()不是类的成员(但它是)。

这是我认为正在发生的事情:

  • 物理上位于“单行”上的大量代码(用于 56 个函数)似乎存在问题。如果我将这些函数从宏中取出,并且如果我删除了\转义行结尾,那么gcc编译得很好。

因此,我认为(代码移植)答案是:

  • 不要使用预处理器宏
  • 制作一个FooParentBase<>派生自 的模板类FooParent,我们从中派生Foo,这需要typename Foo::enum作为模板参数

我对这些更改很好(我不喜欢宏),但我觉得这里gcc似乎有问题很奇怪。

对于如何解决这个问题还有其他建议吗?(上面是否重新考虑了你会做什么?)

0 投票
3 回答
908 浏览

c++ - 使用 PInvoke 时,为什么要使用 __stdcall?

我一直在使用 PInvoke 让我的 C# 应用程序调用我编写的 C++ 函数。

现在,我不断听到我需要用__stdcall约定定义那些外部可访问的函数。我的问题是:为什么?

到目前为止,我不小心忽略了这个建议,一切都像一个魅力。当我添加__stdcall到我的函数中时,一切都以相同的方式工作(或者至少看起来如此)。

本文说它__stdcall用于 Win32 位功能,但我正在针对 x64 平台进行编译。这是否意味着我__stdcall毕竟不应该使用,还是意味着我错过了其他东西?

请在回复时使用简单的英语。;-) 像这样的行(引用自我链接的文章):

被调用者清理堆栈,因此编译器生成可变参数函数 __cdecl。

让我的大脑感觉好像有风滚草吹过它。

0 投票
1 回答
122 浏览

python - 函数内部的函数如何调用?我可以访问这些功能还是像“辅助方法”一样工作?

我正在通过 The Python Tutorial 学习 Python,我目前正在上课(第 9 章),但是在解释“范围和命名空间”时,我遇到了一个问题。

作者举了一个例子:

来源:http ://docs.python.org/3.3/tutorial/classes.html#scopes-and-namespaces-example

据我所知,关键字def是用来定义函数的,函数是放在类​​里面的,但是这种情况下他在一个函数里面定义了一个函数,那么这个函数里面的另一个函数叫什么呢?

有没有办法可以从第一个函数的外部访问它?例如,来自包含 scope_test 的命名空间。

当它们是私有方法时,函数内部的这个函数是否会像其他编程语言(如 Java 和 C#)中调用的“辅助方法”一样工作?

0 投票
3 回答
368 浏览

c - 这种对函数声明的滥用会引发未定义的行为吗?

考虑以下程序:

如您所见,exit用错误的返回类型声明,但从不使用错误的函数类型调用。这个程序的行为是否明确?

0 投票
1 回答
36 浏览

javascript - JavaScript 函数表达式

以下行:

只有 A() 调用该函数。def() 没有。为什么会这样?左边不是函数声明吗?

0 投票
2 回答
115 浏览

c++ - 在定义之前立即声明函数的原因?

因此,在另一个古老的巨大 C++ 代码库中,我经常发现这种风格:

一般来说,我确实理解在 C++ 中前向声明函数的意义何在,但是我找不到这种重复的任何理由。有什么理由消除它吗?

0 投票
1 回答
132 浏览

javascript - “foo = function()”编码风格的 JS 调用者属性

我想将“调用者”的属性用于此处定义的函数

它适用于这种风格的函数声明

JSfiddle 为此

但是我的函数声明类似于

而且我越来越不确定(基本上什么都没有)

JSfiddle 为此

有什么方法可以使用调用者属性而无需重写我的代码?另外,我希望我在使用和函数声明方面没有犯任何错误,因为我对使用 JS 很陌生。

0 投票
1 回答
192 浏览

c - 结构作为函数的输出

我写了这段代码,但是当尝试编译它时,它返回了这个错误:

我指定了行数。

我猜 struct 作为输出有问题。这个 struct 是一个链表,每次调用safe_syscall函数时,都会将新节点添加到列表的头部,并由该函数返回新的头部。

0 投票
1 回答
198 浏览

c - [ ] 也是 C 中的声明符(在参数声明中使用时)吗?

6.7.6 声明者

每个声明符声明一个标识符,并断言当与声明符形式相同的操作数出现在表达式中时,它指定一个函数或对象,其范围、存储期限和类型由声明说明符指示。

并且还说明了参数的语法

对于给定的函数原型

int a[]a[]用声明标识符的声明器声明一个参数a


虽然在

int []声明参数是一个没有标识符的 int 数组。也是声明者吗
[](我认为不是,因为它没有声明标识符,但参数的语法说它是!)