Что произойдет, если я объявлю массив нулевого размера в C/C++?

Просто любопытно, что на самом деле произойдет, если я определю в коде массив нулевой длины int array[0];? GCC вообще не жалуется.

Пример программы

#include <stdio.h>

int main() {
    int arr[0];
    return 0;
}

Пояснение

На самом деле я пытаюсь выяснить, оптимизированы ли массивы нулевой длины, инициализированные таким образом, вместо того, чтобы указывать на них, как переменная длина в комментариях Дархазера.

Это потому, что мне нужно выпустить некоторый код в дикую природу, поэтому я пытаюсь выяснить, должен ли я обрабатывать случаи, когда SIZEопределяется как 0, что происходит в некотором коде со статически определенным int array[SIZE];

На самом деле я был удивлен, что GCC не жалуется, что привело к моему вопросу. Из ответов, которые я получил, я считаю, что отсутствие предупреждения во многом связано с поддержкой старого кода, который не был обновлен новым синтаксисом [].

Поскольку я в основном задавался вопросом об ошибке, я помечаю ответ Лундина как правильный (ответ Наваза был первым, но он не был таким полным) — другие указывали на его фактическое использование для структур с подкладкой хвоста, в то время как уместно , это не совсем то, что я искал.

120
задан Alex Koay 15 March 2012 в 15:47
поделиться