inlining a function

丶灬走出姿态 提交于 2019-12-24 00:59:39

问题


I am developing in C using gcc in Linux.

I am organizing my small functions in .H and .C files in the following way

      // .H file
      extern int my_function( int val );

      // .C file
      inline int my_function( int val ){
          // my job..very short!
      }

These functions are small so they are very good candidates to be inlined but I don't know if they will be for sure.

I have doubt about the way I cam organizing my file and I was thinking that probably it would be better to have all my functions inlined directly into the .h file without .C file. Can you help me a bit in clarifying my doubt?


回答1:


First of all, note that you can tell gcc to try and inline small functions into their callers by adding the -finline-functions option.

If you have any doubt that your function will actually be inlined, you can ask gcc to warn you about uninlinable function, by using -Winline

Here, as your functions are declared both extern and inline, they will be inlined as the inline definition will only be used for inlining. In this particular situation the function will not be compiled on its own at all.

Read http://gcc.gnu.org/onlinedocs/gcc/Inline.html for further details.




回答2:


No matter how small your function is, the choice is compiler's whether or not to inline it.

So even if you have very few number of functions and you inline them all in your code, there's still no guarantee that all will be inlined by the compiler.

You can find some useful inshgts on inlining here.




回答3:


First, the compiler must be able to see the definition of a function in order to inline it. Hence, you must place the definition in the header file. (Here, I'm assuming your application consists of more than one source file). Note: Some development environments support multi-file compilation, in which case this remark does not apply.

Secondly, the semantics of inline C99 is a bit confusing if you are accustomed C++ (where things "just work"). In C99, you must single out a single source file (not header file) which own the function -- in case the function is not inlined in some source file, there must exist exactly one explicit definition of the function. This is done by specifying the function using the extern keyword. (This is a deviation from the traditional interpretation of extern, that it was used for declarations only).

For example:

  // .h file
  inline int my_function( int val )
  {
      // my job..very short!
  }

  // In ONE .c file
  extern int my_function( int val );


来源:https://stackoverflow.com/questions/9946418/inlining-a-function

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!