Editing BoostC Inline Functions

Jump to navigation Jump to search

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.

Latest revision Your text
Line 1: Line 1:
 
Inline functions are statements that look like functions but do not really call anyting or return, the code is generated right "inline" with the statements before and after the "function call".  There are a couple of different ways to do this, and a couple of different reasons to do it.
 
Inline functions are statements that look like functions but do not really call anyting or return, the code is generated right "inline" with the statements before and after the "function call".  There are a couple of different ways to do this, and a couple of different reasons to do it.
  
== Ways of Creating Inline Functions==
+
== Ways ==
  
*Using a #define
+
*Using a #DEFINE
*Using a #define with arguments
+
*Using a inline qualifier in the function definition.
*Using a inline qualifier in the function definition
 
*Using assembler inline  -- this is not an inline function, at least as I am using the term here.
 
  
== Reasons to Use Inline Functions ==
+
== Reasons ==
  
 
*Smaller faster code -- sometimes, sometimes not.  ( the first time it is used, your save the code for subroutine linkage, the second time you call you have two copies of the function )
 
*Smaller faster code -- sometimes, sometimes not.  ( the first time it is used, your save the code for subroutine linkage, the second time you call you have two copies of the function )
Line 20: Line 18:
 
Because there are actually two different versions of the function.
 
Because there are actually two different versions of the function.
  
== #define -- Some Details ==
+
== #DEFINE Details ==
  
all of a #define must be contained on one line, but a function typically requires several lines.  The lines can be simulated by the required ";" the end of statement marker, but you can still run out of line length.  You can combine different lines by using the line xxxx characer "\" at the end of a line.  This lets you change:
+
all of a #define must b e contained on one line, but a function typically requires several lines.  The lines can be simulated by the required ";" the end of statement marker, but you can still run out of line length.  You can combine different lines by using the line xxxx characer "\" at the end of a line.  This lets you change:
  
     if ( a == 0 ) { x = 1; y = 2; }
+
      
  
  
 
to  
 
to  
  
    if ( a == 0 ) { \
+
 
        x = 1; \
 
        y = 2; \
 
    }
 
 
      
 
      
  
Line 39: Line 34:
 
--- all this needs to be completed and verified in boostc
 
--- all this needs to be completed and verified in boostc
  
== #define with Arguments -- Some Details ==
+
== Inline Details ==
 
 
 
 
Still to be written
 
 
 
== Inline C -- Some Details ==
 
  
 
For this method you qualify the function with the keyword inline.  According to the manual you can do anything you would with any other function.  Perhaps.   
 
For this method you qualify the function with the keyword inline.  According to the manual you can do anything you would with any other function.  Perhaps.   
Line 56: Line 46:
 
Cons:
 
Cons:
  
*You can not debug ( source code ) into the function. UPDATE: Actually this is not correct. Debug of inline functions is disabled by default but can be enabled using compiler command line argument -i
+
*You can not debug ( source code ) into the function.
 
 
Comment:
 
 
 
I tried to use an inline function in a .c file and call it from another .c file.  It was declared in the .h file.  This would not compile.  I had to move the entier inline function to the .h file.  This caused other reference problems. So if I did this right just adding the inline qualifier may not be enough in some cases. -- This should be checked more carefully.
 
  
== Inline Assmebler Code -- Some Details ==
 
 
This type of inline code is not a function it is simply a way of including assembler in the middl of, or inline with C code.  Not explained here yet. The manual is pretty good on this topic.
 
  
 
== Source Code Using Inline Functions ==
 
== Source Code Using Inline Functions ==
Line 71: Line 54:
 
== Links ==
 
== Links ==
  
[http://publications.gbdirect.co.uk/c_book/chapter2/textual_program_structure.html 2.3. The Textual Structure of Programs]
 
 
[http://irc.essex.ac.uk/www.iota-six.co.uk/c/j1_the_c_preprocessor.asp The C Preprocessor]
 
 
[http://www.cs.cf.ac.uk/Dave/C/node14.html The C Preprocessor]
 
 
[http://publications.gbdirect.co.uk/c_book/chapter7/how_the_preprocessor_works.html 7.2. How the preprocessor works]
 
 
[http://en.wikipedia.org/wiki/C_preprocessor C preprocessor From Wikipedia, the free encyclopedia]
 
  
  
 
[[Category:BoostC]][[Category:PIC]]
 
[[Category:BoostC]][[Category:PIC]]

Please note that all contributions to OpenCircuits may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see OpenCircuits:Copyrights for details). Do not submit copyrighted work without permission!

Cancel Editing help (opens in new window)