#ifdef

#ifdef — Conditional reading of code.

Description

Macros are textual replacements which are made in the orchestra as it is being read. The orchestra macro system in Csound is a very simple one, and uses the characters # and $ to define and call macros. This can save typing, and can lead to a coherent structure and consistent style. This is similar to, but independent of, the macro system in the score language.

If a macro is defined then #ifdef can incorporate text into an orchestra upto the next #end.

Syntax

#ifdef NAME
....
#else 
....
#end 

Performance

Note that the #ifdef can be nested, like in the C preprocessor language.

Examples

Here is a simple example of the conditional.

Example 12. Simple example of the #ifdef form.

#define debug ##
     instr 1
#ifdef debug
     print "calling oscil"
#end
     a1   oscil 32000,440,1
     out  a1
     endin


Here is another example of the #ifdef conditional. It uses the file ifdef.csd.

Example 13. Detailed example of the #ifdef form.

See the sections Real-time Audio and Command Line Flags for more information on using command line flags.

<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
-odac     ;;;realtime audio out
;-iadc    ;;;uncomment -iadc if realtime audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o oscil.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>
sr = 44100
ksmps = 10
nchnls = 2
0dbfs = 1

; Determines which instrument outputs debug statements with defines:
; Change which one is commented out to alter behavior before execution
#define debug1 ##
; #define debug2 ##

 instr 1
 	iFreq = p4
	; Outputs text if debug1 is defined
	; This one should print by default
	#ifdef debug1
	     prints "instr 1 debug called\n"
	#end
     a1   vco2 .25, iFreq
     outs  a1, a1
 endin

 instr 2
 	iFreq = p4
	; Outputs text if debug2 is defined
	; This one should not print by default
	#ifdef debug2
	     prints "instr 2 debug called\n"
	#end
     a1   vco2 .25, iFreq
     outs  a1, a1
 endin

</CsInstruments>
<CsScore>
i1 0 2 440
i2 0 2 660
</CsScore>
</CsoundSynthesizer>


See Also

#define, $NAME, #ifndef, #include, #undef

Credits

Author: John ffitch
University of Bath/Codemist Ltd.
Bath, UK
April 2005

New in Csound5 (and 4.23f13)