In C++11, puoi dichiarare variabili globali e prototipi di funzioni sulla stessa riga?

Aug 20 2020

Mentre stavo scrivendo del codice C++ 11:

#include <bits/stdc++.h>
using namespace std;

int a, b, array[25];
int function();

int main() {
... (not important)

per curiosità, ho inserito le dichiarazioni delle variabili nella stessa riga del prototipo della funzione:

#include <bits/stdc++.h>
using namespace std;

int function(), a, b, array[25];

int main() {
... (not important)

È stato compilato correttamente su XCode (impostato su [-std=c++11]) e a, b, array[]potrebbe essere utilizzato come normali variabili/array.

Funzionerà con la maggior parte/tutti i compilatori e va bene/sconsigliato? Perché funziona in C++ (i prototipi di funzione e le dichiarazioni di variabile sembrano abbastanza diversi...)

Grazie in anticipo per il vostro tempo.

Risposte

2 molbdnilo Aug 20 2020 at 13:54

La dichiarazione dice che function(x), a, b, e array[i]sono tutte ints.
(Questa è la "lettura vecchia scuola" dei tipi - funziona sempre in C, ma C++ l'ha rotto; int *xpuò essere letto " *xè un int", ma int &xnon può essere letto " &xè un int".)

Questo è andato bene fin dai primi giorni di C (quindi, per mezzo secolo circa), e non è limitato alle dichiarazioni globali.

È anche molto confuso e non troverai molti che pensano che sia una buona idea.
La maggior parte delle persone ha ormai rinunciato a dichiarare più di una variabile in una riga.
È meno leggibile, è facile dimenticare un inizializzatore e oggigiorno gli schermi sono in grado di visualizzare molte righe contemporaneamente.