问题标签 [function-definition]

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 投票
2 回答
80 浏览

scala - 为什么不将函数定义为单例函数?

考虑在无形回购中找到的单例函数的定义:

def将其与以下示例中的传统语法进行对比:

相对

请注意呼叫站点现在如何变为

代替

或者

就个人而言,UtilWithASingleMethodpackage 似乎只是为了能够使用熟悉的def语法而没有添加任何有用的信息。

除了诸如不熟悉或与工厂模式中使用的对象+应用样式混淆等主观缺点外,单例函数定义是否有任何技术缺点?

0 投票
2 回答
358 浏览

scala - 定义翻转其参数的函数

我是 Scala 语言的新手,我试图定义一个翻转其参数的基本函数,我定义它是这样的:

var flipArguments = ((a: Any, b: Any) => Any ) => ((b: Any, a: Any) => Any)

但我收到一个编译错误,突出显示带有消息的第二个箭头

而且我不明白我在哪里犯了语法错误。

0 投票
4 回答
300 浏览

c - 为什么在 C 中声明函数名和功能块之间的变量编译为有效?

C lang FAQ我发现了以下代码:

我测试了用-Wall -std=c11 -pedantic标志编译它,它编译时没有警告或错误。这怎么可能——在函数名和它的块之间声明的变量?

编辑

发布几个小时后,经过多次回答,我发现该问题已作为重复项关闭。我不同意关闭的决定。事实上,到目前为止,这里给出的重复问答和答案虽然大致正确,但并没有具体回答我的问题。

我的查询是关于出现函数名及其块之间的变量声明。好吧,这就是最初的 K&R 风格,但我仍然觉得声明的位置令人震惊。阅读了描述 ANSI C89 的 K&R 第二版书后,我意识到以前的风格允许以不同的方式声明函数参数,但是 AFAIK 那本书没有显示以这种方式进行的声明。也许确实如此,但我已经忘记了。

我相信最好单独提出关于这个特定问题的问题,以防其他人在未来被它抛出。我的问题应该代表任何能够阐明如何决定允许在这个奇怪的位置声明参数的人。你从 C 和所有受 C 启发的语言中得到的印象是,在标记和它的大括号之间没有任何东西。我的问题提请注意一个重要的例外,即使它是 30/40 岁,也应该强调它的基本原理。

编辑 2

我现在发现 C++ 语法允许在函数名和它的块之间添加一个标记。即便如此,介于两者之间的整个声明行的想法更为严重,值得向 C 新手指出,这是他们可能遇到的一个怪癖。我查过,K&R 第二版书确实没有明确提到这一点。

0 投票
1 回答
128 浏览

c - 如何使用 C 中的 while 循环和数组递归地计算字符串中的元音?

我有一个作业,其中给了我一个代码,该代码应该计算字符串中元音的数量。缺少代码片段,我必须填写它。但是我一生都无法弄清楚如何去做。我可以很容易地用 for 循环计算元音,但是这个作业非常严格,我不知道如何让这个程序以这种方式工作。这是代码:

/-/是我应该填写以使程序正常工作的区域。元音函数中的 while 循环给我带来了最大的麻烦,我完全不知道该放什么。这是我到目前为止所得到的。

我知道“递归”意味着我应该在它的主体内调用函数,但我不明白如何在这个程序中执行它。请帮忙!

编辑:“编写一个递归函数 vowels(),它返回字符串中的多个元音。” 这就是我得到的任务。我提交的第一个代码是我从教授那里得到的,我不能以任何方式更改它,我只能填写空白(/-/)。我提交的第二个代码是我认为应该在空白处的,但它可能不正确。

EDIT2:我忘了提到的另一件事,这些行的顺序可能是错误的,我应该把它和正确的顺序放在一起并填写空白。我认为我提交的订单是正确的,但我可能错了。

0 投票
1 回答
161 浏览

llvm - LLVM:以前未定义的“无效重新定义函数”

我正在开发一个编译器来为一种玩具语言(一个类)生成 LLVM IR 代码。

但是,我不断收到一个奇怪的错误:“函数 Main_main 的重新定义无效”。此函数仅定义一次,如“Main_main”的 grepping 所示:

第一行是声明它的位置,第二行是指向它的指针存储在 vtable 中的位置,第三行是调用它的位置,第四行是定义它的位置。当然只有其中一个算作定义吗?

确切的错误信息:

我在做什么错,这让 LLVM 认为这是一个重新定义?

0 投票
5 回答
693 浏览

c - 是否可以在仅在文件“.c”中指定的未知类型的头文件中声明函数?

如果需要,我可以提供具体的实施细节,但一般问题如下:

是否可以在头文件.h 中声明具有未知类型参数的函数,该参数仅在 file.c 中指定?

c++Template-like 解决方案不能解决我的情况,因为我不希望不同的参数类型可能作为我的函数的输入,定义只考虑一种情况,我宁愿没有这个选项。我只是想让header中的声明忽略参数类型,而只是通知其他文件这个函数的存在。这是可行的还是我应该重新考虑我的问题?

实现细节:该函数在 file.c 中声明为静态,我想通过包含相关的 file.h 标头来删除静态以便能够在其他地方使用它。

0 投票
1 回答
64 浏览

c - 声明一个没有参数的函数原型会造成安全漏洞吗?

我听说调用int main(){...}是一种不好的做法,应该使用参数调用函数int main(int argc, char* argv[]){...},我想知道这是否可以推广到头文件中的函数声明

在某些情况下,可能必须在没有任何输入参数的头文件中编写函数原型(由于某些原因,比如说包含问题),并在一个遥远的 .c 文件中的函数定义中声明输入参数及其类型。这是否可能导致安全问题,因为人们可以利用这种信息缺失?还是函数定义(声明了输入参数)阻止了这一点?我找不到有关此的任何链接。

0 投票
1 回答
48 浏览

c++ - 如何在 BST 的这个简单递归实现中消除警告

我正在尝试在 C++ 中实现 DS,这是具有插入和搜索功能的二叉搜索树类的简单实现。代码编译并根据需要提供输出。
codereview 有人指出,搜索功能给出警告,搜索功能中的代码被破坏。该警告类似于“并非所有控制路径都有返回语句”,但我认为这就是递归函数的样子。警告是一个问题,我该如何摆脱它?另外,密码是怎么破的?谢谢你。

0 投票
2 回答
276 浏览

c++ - 为什么 constexpr 解决重复定义?

我有一个头文件,其中字符串被定义为静态全局。

在另一个头文件中,定义了一个枚举,并且模板特化提供了枚举和 .in 中的字符串之间的映射space

当标题包含在多个翻译单元中时,上面的代码不会链接,因为专业化定义不匹配 - 由于每个翻译单元的全局重新定义(我猜)。

在匿名命名空间中包装映射函数或添加static关键字可以解决链接问题,但编译器会抱怨这些函数是defined but not used [-Wunused-function].

但是,将专业定义为constexpr,不再有任何链接或警告问题。

我理解为什么非static版本在链接时会失败,以及为什么static版本可以工作并触发警告。但我不明白为什么说明constexpr符解决了这两个问题。

您能否在标准中给出一个解释,甚至更好,一个理性的?

0 投票
3 回答
91 浏览

c - 无法使用 C 中的按值调用方法执行简单函数

我正在尝试测试我最近学到的这种方法(按值调用),但是由于我未知的原因,代码不起作用,有人可以解释一下为什么吗?(顺便说一下乱七八糟的)