Visual Studio, начиная с VS2013, поддерживает составные литералы и назначенные инициализаторы. Какие функции C99 доступны в компиляторе MS Visual Studio?
Пример:
// main.c
#include <stdio.h>
void func(int(*array)[3]);
int main()
{
// Designated initializers
int a[6] = { [4] = 29, [2] = 15 }; // [0, 0, 15, 0, 29, 0]
struct point { int x, y; };
struct point p = { .y = 13, .x = 27 }; // x = 27, y = 13
union foo { int i; double d; };
union foo f = { .d = 4 }; // d = 4.0
struct point ptarray[5] = { [2].y = 34, [2].x = 42, [0].x = 58 };
// (58 0), (0 0), (42 34), (0 0), (0 0)
// Compound literals
int *a1 = NULL;
a1 = (int[6]) { [4] = 29, [2] = 15 }; // [0, 0, 15, 0, 29, 0]
struct point p1;
p1 = (struct point) { .y = 13, .x = 27 }; // x = 27, y = 13
union foo f1;
f1 = (union foo) { .d = 4 }; // d = 4.0
struct point *ptarray1 = NULL;
ptarray1 = (struct point[5]) { [2].y = 34, [2].x = 42, [0].x = 58 };
// (58 0), (0 0), (42 34), (0 0), (0 0)
int *p2 = NULL;
p2 = (int[2]) { -1 };
p2 = (int[]) { -73, 89, 92 };
func(&(int[]) { -73, 89, 92 });
return 0;
}
void func(int(*array)[3])
{
for (int i = 0; i < 3; i++) {
printf("%d ", (*array)[i]);
}
}