问题标签 [inline-functions]

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 回答
6190 浏览

c++ - 可以在 gdb 中调用内联函数和/或使用 GCC 发出它们吗?

我们都知道内联函数会使调试变得更加棘手,因为它们可以从堆栈跟踪等中删除。但是假设我想从 gdb 中调用一个内联函数,并且我知道它的名称和参数。我想我应该能够做到这一点,但我明白了:

nm以前在我使用的共享库中列出符号,发现我要调用的函数不在里面。没什么大惊喜。我想要的是一种生成这些内联函数的可见定义的方法。我可以访问当前包含内联定义的头文件,但我无法真正修改这些头文件。也许有某种方法可以告诉编译器发出它在翻译单元中看到的所有内联函数的定义?或者其他一些技巧可以更容易地调用和检查 gdb 中内联函数的结果?

我在 Linux 上使用 GCC 4.7.2 和 GDB 7.5.1。而且我不能真正切换到未优化的构建,因为我正在调试生产中的核心转储(在开发中我会关闭优化,然后事情就更容易了)。

0 投票
2 回答
122 浏览

python - Python - 内联从委托中获取元组的一个成员

前面的问题中,函数不能在字典对象中内联定义。

但是,我只有这个简单的案例,

有没有办法指定我只想要返回的元组的一个元素,os.path.splitext这样我就可以摆脱定义getExtension

0 投票
1 回答
1110 浏览

c++ - inline functions link error C++

Consider the following code:

In header.h

In header.cpp

In main.cpp

Here I get a link error because foo function is defined as inline in header.cpp, if I remove the 'inline' keyword, the compile and run will proceed without errors.

Please tell me why I get link error on this 'inline' function?

0 投票
4 回答
8170 浏览

c++ - 内联函数与普通函数

我对 C 和 C++ 相当陌生,我正在尝试了解函数。我遇到了一个称为内联函数的术语,并将其理解为当一个函数被声明为内联时,编译器无论何时何地都会将整个代码粘贴到该函数中。

我认为这实际上是在函数调用中发生的,但现在意识到事实并非如此。

有人可以详细解释调用普通函数和调用内联函数时在编译器和系统级别会发生什么吗?

任何有关理解这一点的材料将不胜感激。

0 投票
2 回答
594 浏览

c - C99 inline 背后的想法是什么?

我对inlineC99感到困惑。

这是我想要的:

  1. 我希望我的函数在任何地方都被内联,而不仅仅是一个翻译单元(或一个编译单元,一个.c文件)。
  2. 我希望函数的地址一致。如果我将函数的地址保存在函数指针中,我希望函数可以从指针调用,并且我不希望在不同的翻译单元中重复相同的函数(基本上,我的意思是 no static inline)。

C++inline正是这样做的。

但是(如果我错了,请纠正我)在 C99 中没有办法得到这种行为。

我可以使用static inline,但它会导致重复(不同翻译单元中相同函数的地址不一样)。我不想要这种重复。

所以,这是我的问题:

  1. inlineC99背后的想法是什么?
  2. 与 C++ 的方法相比,这种设计有什么好处?

参考:

  1. 这是一个高度评价 C99 的链接inline,但我不明白为什么。这种“仅在一个编译单元中”的限制真的那么好吗?
    http://gustedt.wordpress.com/2010/11/29/myth-and-reality-about-inline-in-c99/
  2. 这是 C99 的基本原理inline。我读过,但我不明白。
    没有“静态”或“外部”的“内联”在 C99 中有用吗?
  3. 一篇不错的帖子,提供了使用inline函数的策略。
    http://www.greenend.org.uk/rjk/tech/inline.html

答案摘要

如何inline在 C99 中获得 C++ 行为(是的,我们可以)

head.h

src.c

main.c

编译它:gcc -O3 main.c src.c -std=c99
检查程序集:gcc -O3 -S main.c src.c -std=c99,你会发现它在和my_max中都内联。 call_and_print_addr()main()

实际上,这与参考 1 和参考 3 给出的指令完全相同。我怎么了?

我使用了一个太旧版本的 GCC (3.4.5) 进行实验,它给了我“多重定义my_max”的错误信息,这才是我如此困惑的真正原因。耻辱。

C99 和 C++ 的区别inline

实际上,您可以通过以下方式编译上面的示例g++g++ main.c src.c

在 C++ 中是多余的,但在 C99 中是必需的。

那么它在 C99 中的作用是什么?

同样,使用gcc -O3 -S main.c src.c -std=c99,您会在以下位置找到类似的内容src.s

如果您将其剪切extern inline int my_max(int x, int y);并粘贴到main.c中,您将在 中找到这些汇编代码main.s

所以,extern inline你告诉编译器真正的函数my_max(),你可以通过它的地址调用它,将在哪里定义和编译。

现在回头看 C++,我们无法指定它。我们永远不知道my_max()会在哪里,这就是@Potatoswatter 的“模糊联系”。

正如@Adriano 所说,大多数时候,我们并不关心这个细节,但 C99 确实消除了歧义。

0 投票
3 回答
14211 浏览

vba - Are nested functions possible in VBA?

I'm trying to clean up code by stripping parameters from a function within a private scope, like this:

Is this possible? Compiler complains, "Expected End Function", since I'm beginning a function before ending the outer one. And Google is no help :( PS I can't define cleaner() outside of mainActionHappensHere(), since then the correct L and U won't get passed into it.

0 投票
2 回答
770 浏览

c - 是 GCC 的选项 -O2 破坏了这个小程序还是我有未定义的行为

我在一个非常大的应用程序中发现了这个问题,并从中制作了一个 SSCCE。我不知道代码是否有未定义的行为或-O2破坏它。

gcc a.c -o a.exe -O2 -Wall -Wextra -Werror它编译时会打印5

但是当编译时没有(例如)或取消注释 2 条注释行之一(防止内联)时,它会打印25 。-O2-O1

GCC 的选项是-O2破坏这个小程序还是我在某处有未定义的行为?

0 投票
1 回答
5048 浏览

c - 头文件中的内联与静态内联

要将inline函数定义放在 C 头文件中,以用于应该内联到多个其他单元的函数,应该inline还是static inline应该使用?我已经在谷歌上搜索了一段时间,但到目前为止似乎没有对差异的简明解释。

0 投票
1 回答
2372 浏览

r - 多列上的 ddply 内联函数

如何将向量/列列表传递给 plyer:ddply 内联函数?此代码有效:

但我想做这样的事情(抛出错误,警告):

谢谢你的建议。

0 投票
1 回答
1324 浏览

c++ - 为什么 C++ 内联函数有调用指令?

我读到内联函数,无论何时进行函数调用,我们都将函数调用替换为函数定义的主体。

根据上面的解释,当inline是用户时不应该有任何函数调用。

如果是这样,为什么我call会在汇编代码中看到三个指令?

笔记

目标文件的完整转储在这里