问题标签 [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 投票
3 回答
1655 浏览

c++ - C++ 函数曾经工作,现在返回 0xfdfdfdfd

我有一些几年前写的代码。它一直运行良好,但是在最近用其他地方的一些新的、不相关的代码重建之后,它不再工作了。这是代码:

上面是从主应用程序访问的,如下所示:

就像我说的,这个 WAS 工作了很长时间,但它只是决定从我们最近的构建开始失败。我已经对此进行了调试,并且可以看到,在设置指针的代码中,它正确地将内存地址设置为实际值。我什至可以单步进入set函数,记下内存地址,然后移动到这个函数,让它得到0xfdfdfdfd,然后在调试器中手动获取内存地址。这会导致代码工作。现在,根据我的阅读, 0xfdfdfdfd 意味着保护字节或“无人区”,但我真的不明白这意味着什么。据说这也意味着一个错误,但我不明白如果代码以前可以工作,那怎么会发生。

0 投票
3 回答
9734 浏览

c - C 内联函数和“未定义的外部”错误

我正在尝试用内联函数替换一些宏子例程,以便编译器可以优化它们,因此调试器可以进入它们等等。如果我将它们定义为普通函数,它可以工作:

但如果我将它们定义为内联:

它说“错误:未定义的外部”。这意味着什么?在黑暗中捅了一刀,我试过了

并且没有更多的错误。函数定义和函数调用在同一个 .c 文件中。

有人可以解释为什么一个有效而另一个无效吗?

(第二个相关问题:如果我想在多个 .c 文件中使用内联函数,我应该把它们放在哪里?)

0 投票
3 回答
323 浏览

c - 静态内联函数的身份?

C静态内联函数在运行时是否具有标识?

我应该关心该构造的命名冲突吗?

如果函数是在.c文件中定义的?是一样的吗?

0 投票
3 回答
305 浏览

c++ - 内联函数/方法

声明:“内联函数必须在调用之前定义。”

这个说法正确吗?

[编辑]

问题最初是德语:
Inline-Funktionen müssen vor ihrem Aufruf definiert sein。

也许它可以帮助任何人......

0 投票
3 回答
160 浏览

c - API 结构实用程序 - 函数或宏?

我在库 API 中定义了一个实用程序结构,它有四个字段,都是数字计数器。

我想提供一些实用程序来轻松处理这些结构。我可以将这些实现为(静态内联)函数,例如

或者我可以将这些实现为宏,例如

我应该考虑如何权衡这两种方法?每种方法都可能同样强大和灵活,但出于某种原因,一种方法是否特别可取?

0 投票
2 回答
1321 浏览

c++ - Depth of inlining in GCC compiler

I have studied that

The inline specifier is a hint to the compiler that it should attempt to generate code [...] inline rather than laying down the code for the function once and then calling through the usual function call mechanism.

Questions:

  1. If optimization is turned off for the GCC compiler, is the inline specifier ignored?
  2. When inline functions are called recursively, which compiler option determines the 'depth of inlining', until it follows the normal function call mechanism ?
  3. If the inline function is invoked inside a for loop, does the same 'depth of inlining' come into the picture ?
0 投票
6 回答
1068 浏览

c++ - 如何保证函数在 C++ 中是内联的

在 C++ 中,可以使用inline关键字将函数定义为内联。就像程序员要求编译器在每个调用函数的地方插入完整的函数体一样。

但据我所知,编译器没有义务尊重这一要求。那么有没有办法保证一个函数是内联的呢?

0 投票
5 回答
206 浏览

c++ - C ++ - CPP和H中定义的内联有什么区别

这不是一个“我遇到这个问题”的问题,而是一个“我真的想了解该语言如何更好地工作”的问题。

我最近开始在给定类的 .cpp 文件中遇到内联功能的定义。我想了解内联功能的定义点之间的区别实际上是什么。在对 CPP 中定义的内联进行对象级别分析时,在 C++ 中声明的内联(与在 .h 中定义相反)似乎有更高的百分比被优化为映射函数,而不是被合法内联 - 是这是主要的区别,或者这背后是否还有其他我没有看到的目的。

0 投票
2 回答
10261 浏览

c++ - 循环和内联函数

为什么不能将带有循环的函数内联?是性能问题还是有其他原因?

0 投票
3 回答
225 浏览

c++ - 如何理解 C++ 入门 3rd 中的句子

<C++ primer (3rd)>以下是Stanley B. Lippman Josée Lajoie的第 7.6 章的摘录。

指定为 inline 的函数在调用它的程序中的每个点都“行内”展开。例如,

int minVal2 = min( i, j );

在编译期间扩展为

int minVal2 = i < j ? 我:j;

因此消除了使 min() 成为函数的运行时开销。min() 通过在函数声明或定义中函数的返回类型之前指定 inline 关键字来声明内联:

内联 int min( int v1, int v2 ) { /* ... */ }

但是请注意,内联规范只是对编译器的建议。编译器可能会选择忽略此建议,因为声明为 inline 的函数不是在调用点进行扩展的良好候选者。递归函数,例如 rgcd(),不能在调用点完全展开(尽管它的第一次调用可以)。一个 1,200 行的功能也很可能不会在调用点进行扩展。通常,内联机制旨在优化小型、直线、经常调用的函数。在抽象数据类型的设计中支持信息隐藏是最重要的, 例如 2.3 节介绍的 IntArray 类及其 size() 内联成员函数。

有人可以解释标记为粗体的句子吗?