Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [C/C++] Costanti simboliche (const)

    Salve gente!
    HO un clamoroso dubbuo sulle costanti simboliche, che, per chei non lo sa, sono quelle dichiarate con:

    const tipo = espressione;

    Se ho bisogno di dichiarare una costante con grandezza definita dall'utente, posso far cosi:

    codice:
    int var;
    printf("Inserisci\n");
    scanf("%d", var);  
    
    const int COSTANTE = var; // OCIO A QUESTA!
    Bene, questo pezzo di codice fa molto discutere:
    io e il mio compilatore linux pensiamo che sia logico e corretto
    Altra gente pensa che sia profondamente sbagliato.

    Se qualcuno di voi sa dirmi si e' possibile o no in ANSI C/C++, mi fa un favore
    ma nn mi basta se mi dite che va o no. Se conoscete UN TESTO, meglio se su internet e meglio se e' ANSI che dice CHE SI PUO' FARE, mi fa un immenso favore.

    Mi vanno benissimo anche semplici osservazioni tipo:
    - a me vanno; uso il compilatore tiziocaio di pippopluto, conforme allo standard ANSI-
    o anche:
    - il mio manuale (pippo e il c++, di tiziocaio, n edizione pluto editore) dice ESPLICITAMENTE che si puo/non si puo' fare. -

    In altre parole vorrei sapere se lo standard lo consente.

    Io pensavo questo: dato che la costante VIENE INIZIALIZZATA (e non MODIFICATA) ad un valore, che pero' e' definito dalla variabile, non ce' nessun problema. In effetti, abbiamo una semplice creazione di costante, senza nessun problema, se non per il fatto che viene inizializzata da un valore definito dall'utente.
    La costante mantiene cmq il suo valore, e la sua funzion.

    Altra gente, che nn nomino, ritiene che questa cosa e' assurda e profondamente sbagliata, in quanto la costante perde la sua funzione, poiche' ogni volta assume il valore della variabile.

    Per me, questo ragionamento e' sbagliato, in quanto la costante viene inizializzata ad un valore e resta tale, infatti se proviamo a modificarla con:

    codice:
    COSTANTE = 5;
    Otteniamo errore di compilazione.

    Voi che ne dite?
    Grazie
    Sayounara
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  2. #2
    Hai ragione tu.

  3. #3
    Utente di HTML.it L'avatar di ChReAn
    Registrato dal
    Aug 2002
    Messaggi
    486
    Come dice anche Schildt, membro del comitato che si è occupato di standardizzare il C++, lo specificatore "const" fa in modo che la variabile dichiarata di seguito non possa essere modificata dal programma. Tale variabile può essere soltanto inizializzata, oppure modificata da eventi ESTERNI al software (soprattutto hardware).
    Ne consegue che non sta scritto da nessuna parte che una variabile const debba ricevere un'assegnazione a un valore esplicito.
    Che poi le const siano utilizzate spesso soltanto come "segnalini" per valori fissi (ad esempio Pi greco) e non come variabili effettivamente intoccabili dal programma, è solo un'abitudine di certi programmatori.
    Il compilatore g++, piuttosto rigoroso nell'interpretazione dell'ANSI C++, compila senza problemi il codice da te postato.
    ChReAn
    -------------------

    Slackware 9.1 powered

  4. #4

    uella!

    grazie a tutti e 2.
    ma ho ancora 2 cose a cui magari sapete rispondere:
    1. Sapete dove trovare UN TESTO, proprio scritto dall'ANSI o altro che dica questo?
    Io sui miei manuali non lo ho torvato (ma infatti, non dicono che una variabile non si puo' usare)
    2. Il compilatore che abbiamo a scuola, Borland C++ 3, non permette di farlo, e' perche' e' vecchio che nn lo fa?

    Grazzzzzie ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  5. #5
    Pare che il documento originale dell'ANSI sia praticamente incomprensibile (a quanto si legge in giro).

    Un testo invece piu malleabile è "C++ Corso di programmazione" di Lippman e Lajoie (50 sacchi) che hanno lavorato con soustroup e fanno parte del comitato di definizione dello standard del C++.

  6. #6

    ci-ci...cinquanta sacchi?

    Ehm... io dovrei solamente dimostrare la mia tesi, non voglia un manuale intero!^_^
    mi farebbe comodo, ma ne ho gia' 3 che devo ancora imparare a memoria...
    su internet nn ce nulla?
    io ho cercato ma senza risultati... nn saprei nenahce dove cercare di preciso...
    sapete dirmi dove trovare cose del genere?
    io guardo ancora...

    grazie
    ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  7. #7
    Oddio l'unica cosa su cui non sono d'accordo è il fatto che le definisci "simboliche".. Io di solito mi riferisco così a quelle "dichiarate" (se così si può dire) con #define. A parte questo sul resto è come dici tu. Aggiungo solo una postilla: sarebbe invece sbagliato in C.

    Ciao.

  8. #8

    ok ok

    non e' che le definisco io simboliche.
    le costanti sono di 2 tipi:
    simboliche, perche' in effetti sono comuni variabili, che non possono essere modificate per via di const, e quindi costanti
    esplicite, sono numeri o stringhe definiti:
    int a = 5;
    5 e' una costante esplicita
    Se poi metti
    #define N 5
    int a = N;

    non cambia la cosa:
    #define non fa altro che sostituire CIO' CHE E' COMPRESO TRA I PRIMI 2 SPAZI (define(spazio)N(spazio)) con tutto cie' che segue sulla riga

    Quindi e' come scriverlo come 5, non cmabia nulla a parte il fatto che se devi modificarlo, lo fai in un colpo solo.

    Cmq, non sono io, e' da manuale dire ESPLICITE e SIMBOLICHE.

    Ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

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.