Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [C++] Chiarimenti

  1. #1

    [C++] Chiarimenti

    Buona sera ragazzi,
    mi sono da poco affacciato al mondo del C++ e quindi mi stavo leggendo la guida che c'è sul sito.

    Alle lezioni 26/27 si parla di prototipi e parametri e volevo fare un paio di domande su questi argomenti.

    Lezione 26 (http://www.html.it/pag/15498/prototipi/)
    Lezione 27 (http://www.html.it/pag/15499/paramet...r-riferimento/)

    Come scritto nelle prime righe della lez 26, "Secondo lo standard ANSI tutte le funzioni devono avere un corrispondente prototipo.", la mia domanda è, questi prototipi sono obbligatori? A cosa servono?

    Un'altra domanda, qual'è la differenza tra il passare alle funzioni i parametri per valore o per riferimento? Perchè non riesco a capire quale sia la differenza dagli esempi che hanno fatto, se non formale, visto che i risultati sono identici.

    Grazie in anticipo a tutti!!

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Quote Originariamente inviata da Eddy16391 Visualizza il messaggio
    Buona sera ragazzi,
    mi sono da poco affacciato al mondo del C++ e quindi mi stavo leggendo la guida che c'è sul sito.
    Poi però è obbligatorio un buon libro.
    la mia domanda è, questi prototipi sono obbligatori? A cosa servono?
    2) Servono a far capire al compilatore che parametri accetta la funzione che stai usando.
    1) Ni. L'esempio 26 non è un campione di chiarezza in quanto prima mette il prototipo, poi la definizione e infine il main. In questa sequenza, il prototipo è inutile. Se però metti in sequenza il prototipo, il main e la definizione e commenti il prototipo, il compilatore non sa che funzione stai usando (che sia definita appena più sotto non conta, conta solo la linea in cui la invochi) e si lamenta.
    A parte questi esempi minimali in cui si opera su un file solo, i prototipi sono sempre obbligatori quando si opera su più file.

    Un'altra domanda, qual'è la differenza tra il passare alle funzioni i parametri per valore o per riferimento? Perchè non riesco a capire quale sia la differenza dagli esempi che hanno fatto, se non formale, visto che i risultati sono identici.
    Altro esempio infelice, nel quale però puoi evincere il perché del prototipo.

    Il tipico esempio è la funzione swap.
    Domanda: quale funzione scambia i due valori?
    Quale funzione che scambia i due valori è più elegante?
    codice:
    include <iostream> // questo è l'header corretto!
    
    void swap_byval(int a, int b);
    void swap_byptr(int* a, int* b);
    void swap_byref(int& a, int& b);
    
    int main () {
        int x = 10;
        int y = 20;
    
        std::cout << "no swap: X = " << x << "; Y = " << y << endl;
    
        swap_byval(x,y);
        std::cout << "swap_byval: X = " << x << "; Y = " << y << endl;
    
        swap_byptr(&x,&y);
        std::cout << "swap_byptr: X = " << x << "; Y = " << y << endl;
    
        swap_byref(x,y);
        std::cout << "swap_byref: X = " << x << "; Y = " << y << endl;
    
        return 0;
    }
    
    void swap_byval(int a, int b) {
        int c = a;
        a = b;
        b = c;
    }
    
    void swap_byptr(int* a, int* b) {
        int c = *a;
        *a = *b;
        *b = c;
    }
    
    void swap_byref(int& a, int& b) {
        int c = a;
        a = b;
        b = c;
    }
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Un consiglio: la guida di C++ di HTML.it è pessima: è obsoleta, piena di errori e "spaccia" come standard diverse peculiarità di vecchie versioni di Visual C++. Dovendo seguire un tutorial online, ti consiglierei di cercare qualcosa di meglio (learncpp.com non era male, ad esempio).
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    grazie ad entrambi.

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.