tags:

views:

115

answers:

2

This seems to work (compiler doesn't complain, anyway):

float adsr[4] = {0,1.0/PULSE_SPEED, 0,1};
[sequence setBaseADSR:adsr];

but I want to make it more concise and do this:

[sequence setBaseADSR:{0,1.0/PULSE_SPEED, 0,1}];

How do I do it? In javascript, I'd call stuff in the brackets an "array literal". Not sure if C languages have the same concept or terminology though.

+2  A: 

The second way does not work because the compiler does not know which type the array elements are. However, this or something like this should work:

[sequence setBaseADSR:(float adsr[4] = {0,1.0/PULSE_SPEED, 0,1})];

as a declaration returns the leftmost element in the expression (cannot test it right now though)

Victor Jalencas
+1, but that looks... wrong... :P
Dave DeLong
indeed. But is the same way we initialize counters in for loops, so for throwaway purposes, it suffices
Victor Jalencas
+2  A: 

If your compiler supports the C99 compound literal syntax, it's possible.

[sequence setBaseADRS:(float [4]){0,1.0/PULSE_SPEED,0,1}];
Cirno de Bergerac