Инициализация циклических данных в C. Соответствует ли этот код C какому-либо стандарту?

Я хотел посмотреть, смогу ли я инициализировать глобальную переменную так, чтобы она указывала сама на себя:

#include <stdio.h>
struct foo { struct foo *a, *b; } x = { &x, &x };
int main()
{
    printf("&x = %p, x.a = %p, x.b = %p\n", &x, x.a, x.b);
    return 0;
}

Этот код компилируется и работает, как и ожидалось, с gcc(все три указателя печатаются одинаково).

Я хочу знать:

  1. Это надежно?
  2. Это стандарт?
  3. Это переносимо?

РЕДАКТИРОВАТЬ: Просто для уточнения, Я сомневаюсь в наличии адреса xв собственном инициализаторе.

16
задан Matt 29 May 2012 в 20:56
поделиться