Un consiglio su dubbi di "stile" in 'C'

di il
25 risposte

25 Risposte - Pagina 2

  • Re: Un consiglio su dubbi di "stile" in 'C'

    Prova questo
    
    #include <stdio.h>
    
    int main()
    {
       volatile const int a = 0;
       printf("la variabile vale: %d\n",a);
       int * p = (int *) &a;
       *p=1;
       printf("la variabile Vale: %d\n",a);
       printf("i due puntatori sono uguali: %p, %p\n",(void *) &a, (void *) p);
       return 0;
    }
    
    
    EDIT ho cambiato *p con a, ma comunque non cambia nulla
    sono due differenti prove che danno lo stesso risultato
  • Re: Un consiglio su dubbi di "stile" in 'C'

    oregon ha scritto:


    -pedantic-errors
    Si, ho provato in tutte le maniere

    Tu invece

    Hai provato con volatile?
  • Re: Un consiglio su dubbi di "stile" in 'C'

    Con 'volatile' è ovvio che funzioni la modifica tramite puntatore perché stai dicendo al compilatore che il contenuto della memoria relativo al simbolo a potrebbe cambiare in maniera INDIPENDENTE dal codice (tramite altro thread o addirittura su azione diretta dell'hardware, ad esempio per un registro di stato in sola lettura di un controller).

    Se non esistono questi presupposti è CORRETTO che NON CI SIA 'volatile'.


    Ma nel tuo primo post NON avevi usato 'volatile' e in quel caso il compilatore DEVE mantenere il valore costante imposto all'inizio.

    In TUTTI i casi (con e senza 'volatile') non sono consentite modifiche da codice del valore del simbolo ad esempio con

    a=1;

    oppure

    a=*p;
  • Re: Un consiglio su dubbi di "stile" in 'C'

    Piantiamola con questa cosa
    Siccome lo fa e ne hai visto le stampe, non parlerò più di questo

    La mia domanda è: (ed è sempre stata)

    Perché non ne ho warning, pur alterando una costante

    Sei in grado di rispondere a questo?

    Tutto il resto non ha importanza
  • Re: Un consiglio su dubbi di "stile" in 'C'

    Se la metti su questo tono non discuto più con te. Saluti
  • Re: Un consiglio su dubbi di "stile" in 'C'

    Quale tono?

    Sei tu che da ieri dici che io non ottengo quello che ottengo

    Sei tu che hai contestato le mie affermazioni, non io le tue

    Io è da ieri che lo dico che lo so che è sbagliato, ma che non capisco perché ci riesco

    Se ti sei offeso me ne dispiace te ne chiedo scusa, in forma pubblica, ma questo è quello che è successo, basta rileggere
  • Re: Un consiglio su dubbi di "stile" in 'C'

    Non è questione di offesa ma ti faccio notare che il tuo modo di discutere di problematiche tecniche è effettivamente da "programmatore giocattolo". Se scrivi "se sei in grado ..." dopo aver studiato e insegnato il C per 40 anni allora ti mando a quel p... Cerca di capire con chi discuti in un forum.

    Tu rileggi come vuoi, io ho detto SOLO che il MIO compilatore si comporta correttamente, con e senza volatile (per cui, anche se sei stato insistente, ho provato a spiegarti perché non c'entra il volatile ...).

    Se il TUO compilatore non fa quello che dovrebbe probabilmente lo devi aggiornare o usare uno switch come -pedantic-errors che DOVREBBE funzionare ma io non ne sono sicuro perché NON ho la tua versione di gcc, anzi non uso gcc. Comunque potresti anche provare

    -Werror=discarded-qualifiers

    Quindi, per tagliare la testa al toro, fai tu una prova con altro compilatore, magari velocemente usa questo

    https://www.onlinegdb.com/online_c_compile

    e avrai il tuo warning.
  • Re: Un consiglio su dubbi di "stile" in 'C'

    @standardoil

    Se non mi ricordo male const è implementation-defined. Sicuramente alcuni compilatori funzionano come dici tu (sicuro gcc e probabilmente molti di quelli online), altri come ti stanno dicendo gli altri, e secondo me in alcuni casi potresti pure avere segmentation fault. Prova a vedere la norma che dice in proposito.

    Stessa cosa per il puntatore a void. E' corretto quello che dici che il compilatore potrebbe controllare che stai puntando a una costante, se non lo fa deve esserci qualche ragione tecnica
  • Re: Un consiglio su dubbi di "stile" in 'C'

    Questo volevo sapere, grazie
  • Re: Un consiglio su dubbi di "stile" in 'C'

    StandardOil ha scritto:


    Nippolo Unplonked ha scritto:


    https://stackoverflow.com/questions/3801557/can-we-change-the-value-of-an-object-defined-with-const-through-pointers/3801601#3801601
    https://stackoverflow.com/questions/945640/why-can-i-change-a-local-const-variable-through-pointer-casts-but-not-a-global-o/38821474#38821474
  • Re: Un consiglio su dubbi di "stile" in 'C'

    @nippolo

    Ok, allora mi ricordavo bene su const. Per curiosità ho provato con IAR e mi ha messo la costante globale in memoria read only e la costante locale addirittura in un registro (e questo aprirebbe la strada, secondo me, ad undefined behaviour ancora più bizzarri)

    Rimane la questione del secondo punto, che potrebbe non essere mera accademia ma avere ripercussioni su un codice lungo dove una variabile viene rivalutata a costante. Secondo me il compilatore fa finta di nulla perché non far finta di nulla genererebbe warning a valanga anche sulle funzioni standard tipo la malloc. Ma è solo un ipotesi
Devi accedere o registrarti per scrivere nel forum
25 risposte