Devo ammettere che scrivo ancora codice pseudo-C89 (non completamente conforme a C99) principalmente a causa di Microsoft. Mi appoggio fortemente a MSVC per il lato Windows e non sono ancora completamente conformi a C99, ponendo invece la maggior parte della loro attenzione su C ++ 17 e versioni successive.
Inoltre sto lavorando su SDK C contro i quali molti sviluppatori di plug-in usano MSVC per lo sviluppo dei plug-in e alcuni ancora MSVC 2010. Quindi ci sono ancora compilatori popolari che vengono ampiamente utilizzati su piattaforme non così esotiche (a meno che non si consideri Windows esotico) che non implementano ancora completamente C99. Quando si mira a un'ampia compatibilità con la più vasta gamma di compilatori (che è uno dei motivi principali per cui l'SDK è scritto in C e non in C ++), ce ne sono ancora molti che sono ampiamente utilizzati (almeno MSVC) che sono in ritardo sui tempi quando si tratta di supporto C. Sono passati quasi un paio di decenni da C99 e non abbiamo ancora VLA, ad esempio, in MSVC AFAIK (non abbiamo ancora verificato MSVC 2017 ma, vista la posizione di Microsoft su C, dubito che sia molto più conforme a C99) .
E così ci sono purtroppo ancora nuovi compilatori che sono in realtà abbastanza buoni con buoni ottimizzatori e debugger che non sono ancora pienamente conformi a C99. Naturalmente se non fosse per questo, salterei per tutta la C11.
Oltre alla compatibilità dei sorgenti con plugin e MSVC, c'è anche l'interoperabilità con altre lingue. Alcune altre lingue usano l'SDK attraverso un FFI e alcuni di questi FFI comprendono solo C89. Potrebbero non capire bool
o _Bool
come un semplice esempio durante l'importazione funzioni da un dylib e solo capire, per esempio, int
.
Sì, l'argomento a favore è la portabilità, ma la domanda è se in realtà ci sono sistemi non ipotetici che possono usare solo un compilatore C89 ma stanno compilando nuove distribuzioni di software. vale a dire se avessi avviato un nuovo progetto C, come avrei deciso se aderire a C89 potesse aumentare il numero di potenziali utenti?
Ho appena notato questo ma un po 'di eco Blrfl
, il guadagno di produttività usando C99 e C11 non è così enorme nel mio caso, mentre perdere la capacità di consentire alle persone di scrivere i loro plugin in MSVC potrebbe essere un costo enorme (soprattutto dal momento che il prodotto che lavoro on ha la maggiore quota di mercato, di gran lunga, sul lato Windows e l'utente medio spesso acquista e scarica molti plugin di terze parti). Il tipo di prodotto su cui lavoro è quasi a metà strada tra un ambiente di sviluppo per programmatori / programmatori e un prodotto finale per gli artisti, dal momento che così tante persone vogliono sviluppare nuove cose sopra di esso per consentire nuove capacità e ottenere effetti speciali di un le persone gentili non hanno ancora visto. Quindi nel mio caso è stata in realtà una decisione abbastanza semplice favorire almeno C89 per l'SDK.
Suppongo che devi guardare i compilatori intorno a te e provare a capire il tuo target demografico. Se non stai sviluppando un'architettura di plug-in per Windows o stai facendo una programmazione incorporata o stai cercando di creare un kit di sviluppo software che può essere utilizzato dalla più ampia gamma di compilatori e lingue là fuori, allora sicuramente rende le cose più facili da raggiungere per C99 + giusto lontano. Potresti anche considerare quanto di un aumento della produttività ottieni dalla C99 in poi. Non traggo molto beneficio da cose come i VLA poiché mi affido a modi abbastanza semplici per usare lo stack quando i dati si adattano e si accumulano altrimenti.
Ma ci sono molte cose in ritardo rispetto a compilatori popolari come MSVC e FFI in altre lingue che sono interessanti nel senso che possono importare e chiamare funzioni C direttamente da un dylib, ma potrebbero anche essere un po 'indietro sul volte. Quindi, a seconda del tuo dominio, devi considerare molte più cose pratiche che limitarti a privilegiare vecchi e standardizzati per un qualche tipo di estetica.