Un collaboratore di grande reputazione "R.."
su questo forum mi ha detto in modo esplicito questo 2 giorni indietro:È "const int x = get();" legale in C? Possiamo assegnare il valore di ritorno di una funzione a una costante alla dichiarazione?
Initializers for objects of static storage duration must be constant expressions. The result of a function call is not a constant expression.
Stava parlando variables.But globale Non sono sicuro di ciò che accade con costanti dichiarate all'interno della funzione main()
, o qualsiasi funzione in questo senso. Anche se intuitivamente sento che è così anche per le costanti dichiarate all'interno delle funzioni, il seguente programma estratto dal seguente link, con la sua presunta risposta correct
, mi confonde.
http://www.indiabix.com/c-programming/const/discussion-546
#include<stdio.h>
int get();
int main()
{
const int x = get();
printf("%d", x);
return 0;
}
int get()
{
return 20;
}
Così qualcuno può spiegare se è valido C per assegnare un valore di ritorno ad una costante?
... e IIRC, ti ho detto due giorni fa che non c'è alcuna cosa come variabili globali * * a C, e che si sta facendo riferimento a variabili dichiarate nell'ambito di file che hanno la durata di archiviazione statica. C'è una differenza piuttosto grande. Le variabili dichiarate nell'ambito del file hanno una visibilità molto minore; Sono * solo * visibili nella loro unità di traduzione, * dopo * la loro dichiarazione. Le variabili globali sono anche visibili al di fuori della loro unità di traduzione e prima della loro dichiarazione. – Sebivor
@undefinedbehaviour In quale contesto hai postato questo commento? Sei 'R..' usando un altro ID? Chi è IIRC? A proposito, non ci sono davvero variabili globali in C? Le variabili non sono dichiarate al di fuori di tutte le variabili globali delle funzioni? –
Nel contesto di "variabili globali in C", che non esistono per le ragioni che ho indicato sopra, ho detto che non esistono. Io non sono R .. IIRC sta per "Se ricordo correttamente". Puoi cercare "globale" nello standard C, se lo desideri, e non troverai nulla di rilevante. Come ho detto in precedenza, le variabili dichiarate al di fuori di tutte le funzioni sono dichiarate * nell'ambito del file *, con * durata di archiviazione statica * e sono visibili * solo dal punto di dichiarazione fino alla fine dell'unità di traduzione *. Questo è diverso dalla definizione di * variabile globale * in altre lingue. – Sebivor