Errore invalid operands of types float and double to binary operator

di il
50 risposte

50 Risposte - Pagina 4

  • Re: Errore invalid operands of types float and double to binary operator

    jj2007 ha scritto:


    Ups, hai ragione! Avevo letto male, infatti è locale. Le mie scuse.
    Ho ucciso per molto meno! Si scherza eh...

    jj2007 ha scritto:


    Ciò non toglie, però, che non serve inizializzare la variabile locale status, perché viene utilizzata solo dopo questa riga:
    status = acpi_evaluate_object(...)
    Quel che dici è vero, ho cercato una funzione di questo genere proprio perché pensavo che calzasse bene come esempio. Comunque se pensi che si tratta di un kernel e quindi un qualcosa di estremamente complesso capirai anche che quelle funzioni che poi restituiscono un valore che viene salvato in status possono fallire per molte ragioni ed ha quindi una sua utilità assicurarsi che la variabile status sia correttamente inizializzata o perlomeno che abbia un valore scelto dal programmatore.
  • Re: Errore invalid operands of types float and double to binary operator

    IfNotFalseTrue ha scritto:


    Comunque se pensi che si tratta di un kernel e quindi un qualcosa di estremamente complesso capirai anche che quelle funzioni che poi restituiscono un valore che viene salvato in status possono fallire per molte ragioni ed ha quindi una sua utilità assicurarsi che la variabile status sia correttamente inizializzata o perlomeno che abbia un valore scelto dal programmatore.
    Certo! Ma anche se la funzione dove status ha validità è complessa, il compilatore controlla se status viene utilizzata senza inizializzazione, e se questo succede, sputa fuori una warning. I programmatori di compilatori sono bravi, molto più bravi dei loro utenti che spesso non leggono le warnings

    Qualcuno ha scritto sopra che affidare questo rischio al compilatore significherebbe "perdere il controllo sul programma". Sciocchezze, con questa logica potresti abbandonare anche il type checking. Però, mi chiedo perché il compilatore dà solo una warning invece di un errore se una variabile viene utilizzata senza inizializzazione. Per me, è un errore e basta.
  • Re: Errore invalid operands of types float and double to binary operator

    Qualcuno ha scritto sopra che affidare questo rischio al compilatore significherebbe "perdere il controllo sul programma". Sciocchezze, con questa logica potresti abbandonare anche il type checking. Però, mi chiedo perché il compilatore dà solo una warning invece di un errore se una variabile viene utilizzata senza inizializzazione. Per me, è un errore e basta.
    Il "qualcuno" sono io.

    Prima osservazione: manifestamente sei nella fase hobbystica-dilettantistica, ma è normale, capita a tutti. Poi qualcuno ci permane, magari fino alla pensione. Infatti ripetere mille volte l'alfabeto non ti trasforma in un poeta (magari).
    Seconda: perdi effettivamente il controllo (per quanto si possa averlo, visto che il compilatore fa quello che vuole, in realtà), perchè stai sperando che QUALCUN altro (il compilatore, pippo baudo o chi vuoi) faccia un check CHE NON E' garantito. Di cui NON SAI nulla, di cui in sintesi non ti puoi fidare. O meglio puoi farlo, se il progetto è hobbystico, o sei un dilettante (*ci sono casi marginali di compilatori specifici per usi certificati, ma tralascio perchè si apre un mondo ancora più complesso e specializzato).
    Terza: se il compilatore ha a sua volta un bug, cosa fai? Ti do una notizia flash: i compilatori HANNO bug, non sono costituiti da chissà quale "materia oscura informatica perfetta".
    Quarta: se usi un compilatore DIVERSO (oggi capita spesso), cosa fai? Aspetti e speri?
    Quinta: il type chickening (nel senso di pollo) puoi abbandonarlo anche subito, se sai cosa stai facendo. Programmando in assembly non c'è. Com'è possibile? Addirittura il compilatore non c'è proprio. Misteri dell'informatica.
    Sesta: chi lo dice, che utilizzare una variabile senza inizializzazione sia SEMPRE un errore? Per TE sarà un errore, e basta. Per ME dipende dal contesto. Può anche andare benissimo, perfino meglio.
    Il mondo "vero" è "leggermente" meno lineare e prevedibile di come ce lo si immagina.
    Carissimo m2, se ti mancano gli argomenti, passi sempre agli insulti?
    Settima: se non hai mai scritto un assemblatore, un compilatore, un sistema operativo (già che ci siamo), progettato un microprocessore (giusto per sapere cosa "succede davvero", e come), un programma complesso usato effettivamente da (almeno) qualche centinaio di utenti, non hai la minima idea di quanto sostieni. Ti trovi nella fase "scrivo qualcosa, arriva qualche messaggio, andrà bene".
    Non sono insulti, sono fatti oggettivi.
    Ma tranquillo, come detto per me è positivo

    jj2007 ha scritto:


    I programmatori di compilatori sono bravi, molto più bravi dei loro utenti che spesso non leggono le warnings
    Grazie per il complimento
  • Re: Errore invalid operands of types float and double to binary operator

    jj2007 ha scritto:


    IfNotFalseTrue ha scritto:


    Comunque se pensi che si tratta di un kernel e quindi un qualcosa di estremamente complesso capirai anche che quelle funzioni che poi restituiscono un valore che viene salvato in status possono fallire per molte ragioni ed ha quindi una sua utilità assicurarsi che la variabile status sia correttamente inizializzata o perlomeno che abbia un valore scelto dal programmatore.
    Certo! Ma anche se la funzione dove status ha validità è complessa, il compilatore controlla se status viene utilizzata senza inizializzazione, e se questo succede, sputa fuori una warning. I programmatori di compilatori sono bravi, molto più bravi dei loro utenti che spesso non leggono le warnings

    Qualcuno ha scritto sopra che affidare questo rischio al compilatore significherebbe "perdere il controllo sul programma". Sciocchezze, con questa logica potresti abbandonare anche il type checking. Però, mi chiedo perché il compilatore dà solo una warning invece di un errore se una variabile viene utilizzata senza inizializzazione. Per me, è un errore e basta.
    Beh dipende dal compilatore, ad esempio:
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int foo(int a);
    
    int main(void)
    {
        int a;
    
        a = foo(10);
        return 0;
    }
    
    int foo(int a)
    {
        a = a + 1;
        return a;
    }
    Per Clang questo codice è ok, compilato con clang -Weverything prova.c mentre gcc ti da un warning. Eppure Clang è un compilatore conosciuto ed apprezzato da molti
  • Re: Errore invalid operands of types float and double to binary operator

    +m2+ ha scritto:


    Quinta: il type chickening (nel senso di pollo) puoi abbandonarlo anche subito, se sai cosa stai facendo. Programmando in assembly non c'è. Com'è possibile? Addirittura il compilatore non c'è proprio. Misteri dell'informatica.
    Ma che mistero... al momento, ho più di 5,000 fonti di assembly sul mio PC, alcuni ben oltre le 20,000 righe. E ti assicuro che l'assembler fa type checking.
    Comunque, continua pure a vantarti della tua esperienza professionale. Io i prodotti gloriosi dei programmatori professioniali gli uso ogni giorni: Adobe Flash, per esempio. Oppure LibreOffice, lento come una lumaca; poi Visual Crap, QT, ..., la lista delle barzelette "professionali" è lunga.

    @IfNotFalseTrue: Non ho Clang, ma VC, Gcc e Pelles C danno tutti undefined reference to `foo(int)'. Forse intendevi qualcos'altro?
  • Re: Errore invalid operands of types float and double to binary operator

    Facciamo che chiudo il thread così vi tranquillizzate!
Devi accedere o registrarti per scrivere nel forum
50 risposte