小编zsh*_*zsh的帖子

C99内联的理念是什么?

inline在C99 感到困惑.

这就是我想要的:

  1. 我希望我的函数在任何地方都被内联,而不仅仅局限于一个翻译单元(或一个编译单元,一个.c文件).
  2. 我希望函数的地址一致.如果我在函数指针中保存函数的地址,我希望函数可以从指针调用,我不希望在不同的翻译单元中重复相同的函数(基本上,我的意思是没有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

#ifndef __HEAD_H__
#define __HEAD_H__

inline int my_max(int x, int y) {
    return (x>y) ? (x) : (y);
}

void call_and_print_addr();

#endif
Run Code Online (Sandbox Code Playgroud)

src.c

#include "head.h"
#include <stdio.h>

// This is necessary! And it should occurs and only occurs …
Run Code Online (Sandbox Code Playgroud)

c c99 extern inline-functions

9
推荐指数
1
解决办法
511
查看次数

标签 统计

c ×1

c99 ×1

extern ×1

inline-functions ×1