Tag: 内联

C:内联关键字值得吗?

是否值得使用inline关键字或编译器足够聪明,知道何时需要内联函数?

头文件中定义的小函数:内联还是静态?

我有一些在.h文件中定义的小函数。 这是一个小项目(现在),我想避免将声明和定义分开的痛苦,因为它们一直在变化。 为了避免乘法定义的符号,我可以将它们static或inline 。 什么应该是首选,为什么? 我知道在头文件中定义函数通常是不好的做法。 您不必在答案中提及,这个问题在技术上意味着。

在C中,是否可以将导出的函数名称更改为不同的名称?

所有。 我想链接一个调用malloc()函数的库。 但是,我的目标环境是不同的, malloc()作为内联函数提供。 如何使库对malloc()的调用直接指向我的目标环境的malloc()例程? 是否可以通过任何方式更改导出的函数名称? 如果是这样,我可以先编码my_malloc()并将其导出为malloc()并将库链接到该库: #include // malloc() is inline function declared there void my_malloc (void) { malloc (void); } 更具体地说,该库是来自linux发行版的库,因此它依赖于libc。 但我的环境是嵌入式的,没有libc库, malloc() , free() ,…是自定义实现的。 一些是内联函数,一些是库函数。

C语言中不同宏function/内联方法的优缺点

根据C FAQ ,基本上有3种用于在C中“内联”代码的实用方法: #define MACRO(arg1, arg2) do { \ /* declarations */ \ stmt1; \ stmt2; \ /* … */ \ } while(0) /* (no trailing ; ) */ 要么 #define FUNC(arg1, arg2) (expr1, expr2, expr3) 为了澄清这一点,参数在表达式中使用,逗号运算符返回最后一个表达式的值。 要么 使用inline声明作为gcc的扩展和c99标准支持 。 do { … } while (0)方法在Linux内核中被广泛使用,但是如果有的话,我还没有经常遇到其他两种方法。 我指的是多语句“函数”,而不是像MAX或MIN这样的单语句。 每种方法的优点和缺点是什么,为什么你会在各种情况下选择一种方法呢?

如何在C99中正确内联和使用内联函数? (构建失败)

在以下简化的example.c文件上执行cc -std=c99 example.c : inline void a() { } int main() { a(); return 0; } 得到我: 在函数`main’中: example.c :(。text + 0x7):对’a’的未定义引用 collect2:ld返回1退出状态 据我所知,这与C99标准的要求有关,要求在无法内联的情况下使用的每个内联非静态函数的另一个定义? 如果是这样的话,我猜我可以用static inline代替,但我不想让它在以后咬我,那么这里最好的做法是什么呢? 显然,我想坚持C99,我想内联一些function。 (是的,我知道编译器通常知道内联的内容而不被告知,但我有我的理由)

什么是内联函数的概念以及它与宏的不同之处?

可能重复: c ++内联函数? 内联函数的真正概念是什么? 我真的无法理解内联函数。 为什么我应该使用内联函数? 它与正常function有何不同? Edit: what is difference between macro & inline function?

内联函数的多重定义

我已经阅读了一些与此主题相关的post,但无法彻底理清我的疑问。 这可能是一个非常天真的问题。 我有一个头文件inline.h和两个翻译单元main.cpp和tran.cpp 。 代码详情如下 inline.h #ifndef __HEADER__ #include extern inline int func1(void) { return 5; } static inline int func2(void) { return 6; } inline int func3(void) { return 7; } #endif main.c中 #define #include int main(int argc, char *argv[]) { printf(“%d\n”,func1()); printf(“%d\n”,func2()); printf(“%d\n”,func3()); return 0; } tran.cpp //(note that the functions are not […]

简单的C内联链接器错误

简单的问题: 给出以下程序: #include inline void addEmUp(int a, int b, int * result) { if (result) { *result = a+b; } } int main(int argc, const char * argv[]) { int i; addEmUp(1, 2, &i); return 0; } 我收到链接器错误… Undefined symbols for architecture x86_64: _addEmUp”, referenced from: _main in main.o ld: symbol(s) not found for architecture […]

何时“内联”无效? (在C中)

有些人喜欢在C使用inline关键字,并将大函数放在标题中 。 你什么时候认为这是无效的? 我认为它有时甚至很烦人,因为它很不寻常。 我的原则是inline应该用于非常频繁访问的小函数,或者用于实际类型检查。 无论如何,我的品味指导我,但我不知道如何最好地解释为什么inline对大function不那么有用的原因。 在这个问题中,人们建议编译器可以更好地猜测正确的事情。 这也是我的假设。 当我尝试使用这个参数时,人们回复它不适用于来自不同对象的函数。 好吧,我不知道(例如,使用GCC)。 谢谢你的回答!

将函数声明为“内联”的好处?

每当我读到C中的“内联”声明时,都会提到它只是编译器的一个提示 (即它不必遵守它)。 那么添加它有什么好处,还是我应该依赖编译器比我更了解?