<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.mcselec.com/bavr/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.mcselec.com/bavr/index.php?action=history&amp;feed=atom&amp;title=DECLARE_FUNCTION%2Fde</id>
		<title>DECLARE FUNCTION/de - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.mcselec.com/bavr/index.php?action=history&amp;feed=atom&amp;title=DECLARE_FUNCTION%2Fde"/>
		<link rel="alternate" type="text/html" href="http://wiki.mcselec.com/bavr/index.php?title=DECLARE_FUNCTION/de&amp;action=history"/>
		<updated>2026-05-01T22:55:53Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.18.6</generator>

	<entry>
		<id>http://wiki.mcselec.com/bavr/index.php?title=DECLARE_FUNCTION/de&amp;diff=2307&amp;oldid=prev</id>
		<title>Admin: 1 revision</title>
		<link rel="alternate" type="text/html" href="http://wiki.mcselec.com/bavr/index.php?title=DECLARE_FUNCTION/de&amp;diff=2307&amp;oldid=prev"/>
				<updated>2013-02-15T19:14:09Z</updated>
		
		<summary type="html">&lt;p&gt;1 revision&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
		&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 19:14, 15 February 2013&lt;/td&gt;
		&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://wiki.mcselec.com/bavr/index.php?title=DECLARE_FUNCTION/de&amp;diff=2306&amp;oldid=prev</id>
		<title>Admin at 17:24, 8 February 2013</title>
		<link rel="alternate" type="text/html" href="http://wiki.mcselec.com/bavr/index.php?title=DECLARE_FUNCTION/de&amp;diff=2306&amp;oldid=prev"/>
				<updated>2013-02-08T17:24:57Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== (**COPIED FROM ENGLISH PAGE**) === &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Action&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Declares a user function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Syntax&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;f_Syntax&amp;quot;&amp;gt;DECLARE FUNCTION&amp;lt;/span&amp;gt;&amp;amp;nbsp;TEST[( [BYREF/BYVAL] var as type)] As type&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Remarks&amp;lt;/span&amp;gt; =&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px 0px 0px 4px;&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;573&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 2px solid rgb(0, 0, 0); border-spacing: 0px; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;13%&amp;quot; style=&amp;quot;width: 72px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
test&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;87%&amp;quot; style=&amp;quot;width: 492px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
Name of the function.&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;13%&amp;quot; style=&amp;quot;width: 72px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
Var&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;87%&amp;quot; style=&amp;quot;width: 492px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
Name of the variable(s).&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;13%&amp;quot; style=&amp;quot;width: 72px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
Type&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;87%&amp;quot; style=&amp;quot;width: 492px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
Type of the variable(s) and of the result. Byte,Word, Dword, Integer, Long, Single, Double or String. Bits are not supported.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When BYREF or BYVAL is not provided, the parameter will be passed by reference.&lt;br /&gt;
&lt;br /&gt;
Use BYREF to pass a variable by reference with its address.&lt;br /&gt;
&lt;br /&gt;
Use BYVAL to pass a copy of the variable.&lt;br /&gt;
&lt;br /&gt;
Use BYLABEL to pass the address of a label.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the&amp;amp;nbsp;[[CALL]]&amp;amp;nbsp;and&amp;amp;nbsp;[[DECLARE SUB|DECLARE SUB]]&amp;amp;nbsp;statements for more details.&lt;br /&gt;
&lt;br /&gt;
See also&amp;amp;nbsp;[[Memory usage|Memory usage]]&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;ARRAYS&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Arrays can be passed by reference only. You need to add &amp;amp;nbsp;empty parenthesis&amp;lt;span style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;()&amp;lt;/span&amp;gt;&amp;amp;nbsp;after the variable to indicate that you pass an array.&lt;br /&gt;
&lt;br /&gt;
Inside the sub/function you also need to use () when accessing the variable.&lt;br /&gt;
&lt;br /&gt;
Let's have a look at an example which calls a SUB but is similar for FUNCTIONS.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-style: italic;&amp;quot;&amp;gt;Declare Sub TestArray(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-style: italic; font-weight: bold;&amp;quot;&amp;gt;ar()&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-style: italic;&amp;quot;&amp;gt;&amp;amp;nbsp;as byte, b as byte)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-style: italic;&amp;quot;&amp;gt;Dim a(10) as byte , q as byte&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-style: italic;&amp;quot;&amp;gt;TestArray&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-style: italic; font-weight: bold;&amp;quot;&amp;gt;a(1)&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-style: italic;&amp;quot;&amp;gt;&amp;amp;nbsp;, q&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial; font-style: italic;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see, we add () after the variable to indicate that it is an array we pass.&lt;br /&gt;
&lt;br /&gt;
When we call the sub program, we pass the first address or the base address of the array. That is a(1) in this case.&lt;br /&gt;
&lt;br /&gt;
Inside the sub module, we also refer to the variable using ().&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-style: italic;&amp;quot;&amp;gt;Sub TestArray(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-style: italic; font-weight: bold;&amp;quot;&amp;gt;ar()&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-style: italic;&amp;quot;&amp;gt;&amp;amp;nbsp;as byte, b as byte)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-style: italic;&amp;quot;&amp;gt;&amp;amp;nbsp;print ar(1)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-style: italic;&amp;quot;&amp;gt;&amp;amp;nbsp;print ar(b)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-style: italic;&amp;quot;&amp;gt;End Sub&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-style: italic;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In older BASCOM versions, it was not required to use (). You only needed to pass the base address. But that is potential unsafe&amp;amp;nbsp;: if you reference a variable as an array while it is actually a single variable, then you can write to the wrong address. When using (), the compiler known when an array is expected and can inform you about a possible error.&lt;br /&gt;
&lt;br /&gt;
If you have old code you can use CONFIG ERROR=IGNORE,380=IGNORE to ignore errors as a result of the updated syntax.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Notice.jpg|left|Notice.jpg]]&amp;amp;nbsp;You must declare each function before writing the function or calling the function. And the declaration must match the function.&lt;br /&gt;
&lt;br /&gt;
Bits are global and can not be passed to functions or subs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you want to pass a string, you pass it with it's name&amp;amp;nbsp;: string. So the size is not important. For example&amp;amp;nbsp;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-style: italic;&amp;quot;&amp;gt;Declare function Test(s as string, byval z as string) as byte&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may however specify an optional maximum length.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Notice.jpg|left|Notice.jpg]]When you set the function result, you need to take care that no other code is executed after this.&lt;br /&gt;
&lt;br /&gt;
So a good way to set the result would be this&amp;amp;nbsp;:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Function Myfunc(b as byte) as Byte&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;local bDummy as byte&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;'some code here&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;Myfunc=3 ' assign result&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;' no other code is executed&lt;br /&gt;
&lt;br /&gt;
End Function&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;Also good would be:&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Function Myfunc(b as byte) as Byte&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;local bDummy as byte&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;'some code here&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;Myfunc=1 ' assign default result&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;Print &amp;quot;this is a test &amp;quot;&amp;amp;nbsp;; b&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;Myfunc=4 ' now again the result is the last code&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;' no other code is executed&lt;br /&gt;
&lt;br /&gt;
End Function&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
If you execute other code after you assigned the function result, registers will be trashed. This is no problem if you assigned the function result to a variable. But when you use a function without assigning it to a variable, some temporarily registers are used which might be trashed.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Thus this special attention is only needed when you use the function like&amp;amp;nbsp;:&lt;br /&gt;
&lt;br /&gt;
If Myfunc()=3 then &amp;amp;nbsp;'myfunc is not assigned to a variable but the result is needed for the test&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
When you use&amp;amp;nbsp;:&lt;br /&gt;
&lt;br /&gt;
myvar=Myfunc()&lt;br /&gt;
&lt;br /&gt;
Then you will not trash the registers. So in such a case there is no problem to run code after the function assignment.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
To keep it safe, assign the result just before you exit the function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;See also&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
[[CALL]],&amp;amp;nbsp;[[SUB]]&amp;amp;nbsp;,&amp;amp;nbsp;[[CONFIG SUBMODE|CONFIG SUBMODE]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Example&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;source lang=&amp;quot;bascomavr&amp;quot;&amp;gt;&lt;br /&gt;
'-----------------------------------------------------------------------------------------&lt;br /&gt;
'name : function.bas&lt;br /&gt;
'copyright : (c) 1995-2005, MCS Electronics&lt;br /&gt;
'purpose : demonstration of user function&lt;br /&gt;
'micro : Mega48&lt;br /&gt;
'suited for demo : yes&lt;br /&gt;
'commercial addon needed : no&lt;br /&gt;
'-----------------------------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
$regfile = &amp;quot;m48def.dat&amp;quot; ' specify the used micro&lt;br /&gt;
$crystal = 4000000 ' used crystal frequency&lt;br /&gt;
$baud = 19200 ' use baud rate&lt;br /&gt;
$hwstack = 32 ' default use 32 for the hardware stack&lt;br /&gt;
$swstack = 10 ' default use 10 for the SW stack&lt;br /&gt;
$framesize = 40 ' default use 40 for the frame space&lt;br /&gt;
 &lt;br /&gt;
'A user function must be declare before it can be used.&lt;br /&gt;
'A function must return a type&lt;br /&gt;
Declare Function Myfunction(byval I As Integer , S As String) As Integer&lt;br /&gt;
'The byval paramter will pass the parameter by value so the original value&lt;br /&gt;
'will not be changed by the function&lt;br /&gt;
 &lt;br /&gt;
Dim K As Integer&lt;br /&gt;
Dim Z As String * 10&lt;br /&gt;
Dim T As Integer&lt;br /&gt;
'assign the values&lt;br /&gt;
K = 5&lt;br /&gt;
Z = &amp;quot;123&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
T = Myfunction(k , Z)&lt;br /&gt;
Print T&lt;br /&gt;
End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Function Myfunction(byval I As Integer , S As String) As Integer&lt;br /&gt;
'you can use local variables in subs and functions&lt;br /&gt;
Local P As Integer&lt;br /&gt;
P = I&lt;br /&gt;
'because I is passed by value, altering will not change the original&lt;br /&gt;
'variable named k&lt;br /&gt;
I = 10&lt;br /&gt;
 &lt;br /&gt;
P = Val(s) + I&lt;br /&gt;
 &lt;br /&gt;
'finally assign result&lt;br /&gt;
'Note that the same data type must be used !&lt;br /&gt;
'So when declared as an Integer function, the result can only be&lt;br /&gt;
'assigned with an Integer in this case.&lt;br /&gt;
Myfunction = P&lt;br /&gt;
End Function&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;br/&amp;gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
[[Category:BASCOM Language Reference/de]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>