Consider the following initializations:
/* C, C++ */
int a[] = { f(), g() };
struct { int x, y } foo = { f(), g() };
/* C++ */
struct goo { goo(int x, int y);
No, in C the order of evaluation of the initializers is unspecified:
(C11, 6.7.9p23) "The evaluations of the initialization list expressions are indeterminately sequenced with respect to one another and thus the order in which any side effects occur is unspecified.152)"
152) In particular, the evaluation order need not be the same as the order of subobject initialization.
In C++ the behavior is different, and the initializers are evaluated in the order in which they appear (C++11, 8.5.4p4).