Select Case



Basic implementation

dim i as integer		dim i as integer

				scope
select case i + 123			dim temp as integer = any
					temp = i + 123

case 1					if( temp <> 1 ) then goto cmplabel1
					scope
	print "1"				print "1"
					end scope
					goto endlabel

case 2					cmplabel1:
					if( temp <> 2 ) then goto cmplabel2
					scope
	print "2"				print "2"
					end scope
					goto endlabel

case else				cmplabel2:
					scope
	print "else"				print "else"
					end scope

end select				cmplabel3:    '' unused only because in this example the last CASE is not conditional
					endlabel:
				end scope



SELECT CASE on strings/zstrings/fixstrs

dim s as string			dim s as string

				scope
select case s + "1"			dim temp as string

					fb_StrAssign( temp, s )
					fb_StrConcatAssign( temp, "1" )

case "1"				if( fb_StrCompare( temp, "1" ) <> 0 ) then goto cmplabel1
					scope
	print "1"				print "1"
					end scope
					goto endlabel

					cmplabel1:
end select				endlabel:
					fb_StrDelete( temp )    '' destroying the temp var at scope end
				end scope

				fb_StrDelete( s )


SELECT CASE on wstrings

dim w as wstring * 10			dim w as wstring * 10

					scope
select case w + wstr( "1" )			dim temp as wstring ptr

						dim tempexpr as wstring ptr = w + wstr( "1" )
						temp = fb_WstrAlloc( fb_WstrLen( tempexpr ) )
						fb_WstrAssign( temp, tempexpr )

case wstr( "1" )				if( fb_WstrCompare( temp, wstr( "1" ) ) <> 0 ) then goto cmplabel1
						scope
	print "1"					print "1"
						end scope
						goto endlabel

						cmplabel1:
end select					endlabel:
						fb_WstrDelete( temp )    '' destroying the temp var at scope end
					end scope



SELECT CASE without temp var

When the expression given to the select statement is just a simple variable access, then no temporary variable needs to be created. In this case, the given variable itself will be used in the comparisons at each case statement. For example:

dim i as integer		dim i as integer

				scope
select case i

case 1					if( i <> 1 ) then goto cmplabel1
					scope
	print "1"				print "1"
					end scope
					goto endlabel

end select				cmplabel1:
					endlabel:
				end scope



Back to FreeBASIC Developer Information

Back to Table of Contents
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki



sf.net phatcode