Li que C não exige um tamanho mínimo de pilha, deixando-o definido pela implementação. Mas um compilador C em conformidade poderia se recusar a compilar um programa se ele detectar — digamos, por meio de análise estática — que a profundidade da pilha de chamadas (por exemplo, de uma chamada de função aninhada) excede um limite fixo que ele suporta? Ou isso é sempre um problema de tempo de execução? Estou curioso para saber se o padrão C (como C11 ou C23) permite rejeitar sintaxe válida em tempo de compilação com base apenas na profundidade da pilha, assumindo que não há recursão ou comportamento indefinido
O padrão C só se preocupa com limitações durante a compilação, ou seja, coisas como a quantidade de blocos aninhados no código-fonte. Ele não menciona coisas relacionadas ao hardware, como memória de pilha ou profundidade de pilha de chamadas. Alguns dos alvos mais exóticos para os quais você pode escrever código C nem sequer têm uma pilha.
Um compilador C em conformidade só é necessário para dar mensagens de diagnóstico para restrições e violações de sintaxe. Não há nada no padrão que impeça um compilador C de fazer diagnósticos extras além disso. E então os compiladores também tendem a dar mensagens para outras formas de violações: semântica, comportamento explícito indefinido etc., mas nada disso é necessário pelo padrão.
Coisas como ficar sem memória em tempo de compilação são mais um negócio do vinculador e os vinculadores tendem a dar diagnósticos sobre isso. Mas os vinculadores não são realmente cobertos pelo padrão C.
Da mesma forma, o padrão C não declara o que acontecerá com um executável caso haja mensagens de diagnóstico durante a compilação, independentemente se as mensagens forem sobre não conformidade ou outra coisa.