Как правильно сказал Оли, это было изобретено gcc.Цель состоит в том, чтобы (часто с их расширением typeof
) иметь возможность оценивать макроэлементы только один раз и использовать это вычисленное значение позже, используя имя.
Много раз такого использования можно полностью избежать, используяinline
функции.У них также есть (dis) преимущество в том, что они более строги к типам.
В некоторых других случаях, когда вам просто нужна временная переменная, адрес которой вы передаете функции, C99 также имеет составные литералы, которые можно использовать дляэто.