- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个函数(我们称之为 void foo(void) {}
),我希望它是内联的。但是我在 .cpp 文件中定义了它。
我无法将该函数移至 header ,因为它正在使用 .cpp 中的其他函数。
编辑:
下面的代码就像真正的代码一样没有使用 C++ 功能。我可以清楚地补充:
#ifdef __cplusplus
extern "C"
#endif
如果我想将下面的代码转换为 c99,我只需要更改我的项目属性(如果您愿意,也可以更改 makefile)不是代码。我也在问关于 c++ 的问题,因为它可以解决我的问题,而 c99 不能。
因此我的问题中的 C 和 C++ 标签是合理的。代码是可移植的
参见:When to use extern "C" in C++?
编辑 #2
好的,我知道我必须将 foo()
定义放在头文件中。如何从 foo()
中调用 func_a()
和 func_b()
而不将它们移动到头文件中?有什么解决方法吗?
例子
file.c/.cpp:
int func_a (int a, int b, int c) {/*...*/};
double func_b (double a, double b, double c) {/*...*/};
void foo (int a, double b) { // unction definition
//...
int myInt = func_a(a, 2, 3);
//...
double myDouble = func_b(1.5f, b, 3.5f);
//...
}
文件.h:
// Something before.
void foo (int a, double b); // function declaration
// Something after.
我要指出:
file.h
包含在许多其他编译单元中。foo(int, double)
很小,它调用 file.cpp
foo(int, double)
内联(我最终将使用 __forceinline__
)foo()
。它还在几个 while 循环(每个 100k + 迭代)中使用,因此让这个符号 foo()
不是内联的是可扩展的。
我尝试:
file.c/.cpp:
extern inline
void foo (int a, double b) {\*...*\}; // Definition
文件.h:
extern inline
void foo (int a, double b); // Declaration
但我不断收到警告:
warning : extern inline function "foo" was referenced but not defined
而且我不明白为什么我会收到此警告。
有什么办法可以:
foo()
的定义?但还是让它内联foo()
移动到file.h
,保留func_a()
和func_b()
在里面file.cpp
,但使 func_a()
和 func_b()
符号对 foo()
“可见” (!而且只到 foo()
!)来自 file.cpp
抱歉,我仍在学习 cpp,我不知道我的问题是否清楚,或者是否有可能从 .cpp 文件中内联函数。
最佳答案
在 C++ 中,inline
关键字表示:
这就是它所做的一切。实际上,这意味着它可以并强制您将函数体放入头文件中。
关键字本身与函数内联无关。只是如果编译器希望能够内联函数体,它必须在编译调用代码时访问它;换句话说,函数体必须在同一个源文件中或在该源文件包含的头文件中。
如果您想让编译器在所有调用点内联函数,并且这些调用点出现在多个源文件中,您必须将函数放入头文件(并且将其标记为 inline
)。
另一方面,链接器也可以进行内联,称为链接时代码生成或全程序优化或类似的东西(取决于您的工具链供应商)。启用这将
因此,要内联函数,您有两种选择。要么将函数放入头文件,要么启用并依赖链接时优化来为您内联它。
在您的特定情况下,要使用 __forceinline__
,您需要在头文件中定义 foo
。这需要 foo
的定义来查看 func_a
和 func_b
的声明。为了防止命名空间污染,您可以在 foo
的范围内声明这些函数:
inline void foo(int a, double b) { // function definition
int func_a(int, int, int);
double func_b(double, double, double);
//...
int myInt = func_a(a, 2, 3);
//...
double myDouble = func_b(1.5f, b, 3.5f);
//...
}
关于c++ - 外部内联函数被引用但未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40766329/
我之前已经发布了一些这样的代码,试图在正确的位置获得侧边栏链接并以一种特殊的方式看起来,我决定朝着不同的方向前进。我现在需要的是知道我应该做什么来获得我在侧边栏旁边而不是下方标记为“内容”的 div。
我试图让多个 inline 和 inline-block 组件在 div 中垂直对齐。这个例子中的span怎么就非要往下推呢?我已经尝试了 vertical-align:middle; 和 verti
我试图让多个 inline 和 inline-block 组件在 div 中垂直对齐。这个例子中的span怎么就非要往下推呢?我已经尝试了 vertical-align:middle; 和 verti
我试图让多个 inline 和 inline-block 组件在 div 中垂直对齐。这个例子中的span怎么就非要往下推呢?我已经尝试了 vertical-align:middle; 和 verti
我很困惑...所以我在容器中有一个 UL,当我更改 UL 上方的 DIV 时,它似乎会影响 UL 之后的流程...发生了什么事? DIV 是 block 元素,对吗?和 UL 一样,对吧? 所以在这个
我问这个基本问题是为了澄清事实。都提到了这个问题及其目前接受的答案,这是不令人信服的。然而,投票第二多的答案提供了更好的洞察力,但也不是完美的。。在阅读下面的内容时,请尝试区分内联关键字和“内联”概念
function roll_over(img_name, img_src) { document[img_name].src = img_src; } 我使用此代码来显示 T 恤并在鼠标悬停时显
是否可以在 AngularJS 表达式的内联 if 语句中包含多个语句?例如,以下失败: ng-change="someCondition() ? doA(); doB() : doC()" ng-c
我在 RStudio 中使用 R Markdown 创建一个混合 Markdown 和 R 输出的报告。我知道如何在 Markdown 中使用内联 R 表达式,但我想知道如何进行相反的操作,即在 R
我们无法将表单标签添加到内联 CKEditor来自 chrome 和 IE,但它在 Firefox 中运行良好。如果我们将表单添加到内联 CKEditor,它会删除表单标签。 例如:如果我在 Fire
在我的 HTML 代码中,我有两个输入: Yes No 现在我有一个默认情况下的 div,因为它的样式显示内联,我希望当我单击“否”时,它会使其样式不显示,而"is"则会使其内联,所以我制作了此功
如何在 PowerShell 中创建带有内联 If 的语句(IIf,另请参阅: Immediate if 或 ternary If )? 如果您也认为这应该是 native PowerShell 函数
嗨。我在阅读以下问题后提出这个问题:Question_1和 Question_2 。 Question_1 没有任何合适的答案,Question_2 有替代解决方案,但不是完美的解决方案。 这里我有两
有人可以帮我解决以下语法或告诉我是否可行吗?因为我要修改 if ... else ... 条件。我不想在列表中添加重复的值,但我收到了 KeyError。 其实我不太熟悉这种说法: twins[val
有时我喜欢滥用 python 语法,特别是短的 if block : if True : print 'Hello' else : print 'Bye' 现在我尝试对函数定义做同样的事情: i
我在尝试将 Logo 容器底部对齐到零高度父级时遇到了问题。最好,我想用纯 CSS 来实现这一点。 在附带的 fiddle 中,我想让 control-group 的底部与零高度 panel 元素的顶
我需要内联编写 HTML 和 Javascript 代码,即在 HTML 正文中(需要显示一些随机整数值)我搜索了很多博客,但到目前为止没有找到任何帮助。请指教。 我想实现这个功能: Offer
好吧,这更多的是要求澄清 C++ 的一个特性是如何工作的,而不是一个是否可以的答案。我将从解释我遇到的问题开始,因为直接的答案是它不是一个很好的类设计。 我有一个类正在形成一个无法维护的 if 语句
我正在我的 C# 代码中获取一个数据库行。行包含 3 个不同的标志(3 列具有 true 或 false 值)。这些列中只有一列为真,这将决定该对象的类型。我如何在一行代码中确定该对象的类型。如果所有
在 CSS 中,我如何才能只将电话号码加粗,以便它与声明的其余部分内联,但电话号码是加粗的? 而不是在 HTML 中这样做: › Start posting jobs today– 0
我是一名优秀的程序员,十分优秀!