diff options
author | Tobias Klauser <tklauser@distanz.ch> | 2008-01-27 11:37:44 +0100 |
---|---|---|
committer | Tobias Klauser <tklauser@xenon.tklauser.home> | 2008-01-27 11:37:44 +0100 |
commit | 7e0f021a9aec35fd8e6725e87e3313b101d26f5e (patch) | |
tree | b1cacc4b24393f517aeb4610e9e1021f954307a8 /reference/C/SYNTAX/static.htm |
Initial import (2.0.2-6)2.0.2-6
Diffstat (limited to 'reference/C/SYNTAX/static.htm')
-rw-r--r-- | reference/C/SYNTAX/static.htm | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/reference/C/SYNTAX/static.htm b/reference/C/SYNTAX/static.htm new file mode 100644 index 0000000..273eb3a --- /dev/null +++ b/reference/C/SYNTAX/static.htm @@ -0,0 +1,175 @@ +<title>static functions</title> + +<head> +<script language="JavaScript"> +</script> +</head> + +<body bgcolor="#ffffcc"> +<hr> +<center> +<h1>static functions</h1> +</center> +<hr> +<p> + +<b>static functions</b> are functions that are only visable to other +functions in the same file. Consider the following code. +<p> +<table border=2 bgcolor=ivory align=left> +<th> +main.c +</th> +<tr> +<td> +<pre> + + #include <stdio.h> + + main() + { + Func1(); + + Func2(); + } + +</pre> +</td> +</tr> +</table> + +<table border=2 bgcolor=ivory> +<th> +funcs.c +</th> +<tr> +<td> +<pre> + + /************************************* + * + * Function declarations (prototypes). + * + *************************************/ + + /* Func1 is only visable to functions in this file. */ + + <font color=red><i>static</i></font> void Func1(void); + + /* Func2 is visable to all functions. */ + + void Func2(void); + + /************************************* + * + * Function definitions + * + *************************************/ + + void Func1(void) + { + puts("Func1 called"); + } + + /*************************************/ + + void Func2(void) + { + puts("Func2 called"); + } + +</pre> +</td> +</tr> +</table> +<p> +If you attempted to compile this code with the following +command, +<p> + +<center> +<table border=2 bgcolor=ivory> +<tr> +<td> +<pre> + + gcc main.c funcs.c +</pre> +</td> +</tr> +</table> +</center> +<p> +it will fail with an error simular to..... +<p> + +<center> +<table border=2 bgcolor=ivory> +<tr> +<td> +<pre> + + undefined reference to `Func1' +</pre> +</td> +</tr> +</table> +</center> +<p> +Because 'Func1' is declared as <font color=red><i>static</i></font> +and cannot be 'seen' by 'main.c'. +<p> +<hr> +<h2>Notes:</h2> +For some reason, <font color=red><i>static</i></font> has different +meanings in in different contexts. +<ol> +<li> When specified on a function declaration, it makes the +function local to the file. +<p> +<li> When specified with a variable inside a function, it +allows the vairable to retain its value between calls to +the function. See +<a href=../CONCEPT/storage_class.html#static>static variables</a>. +</ol> +It seems a little strange that the same keyword has such +different meanings.... + +<p> +<hr> +<h2>See Also:</h2> + +<img src="../../GRAPHICS/whiteball.gif"> +<a href="../CONCEPT/storage_class.html#static">static variables</a><p> + +<font color=brown> +<img src="../../GRAPHICS/whiteball.gif"> +<a href="../../CPLUSPLUS/SYNTAX/static.htm">C++ extensions for </a>static<p> +</font> + + +<p> + +<hr> +<p> +<center> +<table border=2 width="80%" bgcolor="ivory"> +<tr align=center> +<td width="25%"> +<a href="../cref.html"> Top</a> +</td><td width="25%"> +<a href="../master_index.html"> Master Index</a> +</td><td width="25%"> +<a href="keywords.html"> Keywords</a> +</td><td width="25%"> +<a href="../FUNCTIONS/funcref.htm"> Functions</a> +</td> +</tr> +</table> +</center> +<p> +<hr> +<address>Martin Leslie +</address><p> +</body> +</html> |