Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Siamo tornati nel parco tecnologico di Trieste per il kick-off del programma che mette a disposizione di cinque startup le infrastrutture di ricerca, dal sincrotrone Elettra ai laboratori di genomica e HPC. Roberto Pillon racconta il modello e la visione
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo
HP OMEN MAX 16-ak0001nl combina RTX 5080 Laptop e Ryzen AI 9 HX 375 in un desktop replacement potente e ben raffreddato, con display 240 Hz e dotazione completa. Autonomia limitata e calibrazione non perfetta frenano l'entusiasmo, ma a 2.609 euro è tra le proposte più interessanti della categoria.
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta
Google ha appena rinnovato la sua celebre serie A con il Pixel 10a, lo smartphone della serie più conveniente se consideriamo il rapporto tra costo e prestazioni. Con il chip Tensor G4, un design raffinato soprattutto sul retro e l'integrazione profonda di Gemini, il colosso di Mountain View promette un'esperienza premium a un prezzo accessibile. E il retro non ha nessuno scalino
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-09-2011, 22:11   #1
Freaxxx
Senior Member
 
L'Avatar di Freaxxx
 
Iscritto dal: Dec 2006
Messaggi: 3808
[C] domanda tecnica sul "return"

Se io pongo un return accompagnato da una etichetta di una variabile in una funzione, quella etichetta e il valore contenuto nella variabile come vengono trattati? Dove vengono allocati? Lo standard C pre-Ansi cosa specifica a riguardo?
Freaxxx è offline   Rispondi citando il messaggio o parte di esso
Old 08-09-2011, 09:23   #2
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12960
Quote:
Originariamente inviato da Freaxxx Guarda i messaggi
Se io pongo un return accompagnato da una etichetta di una variabile in una funzione, quella etichetta e il valore contenuto nella variabile come vengono trattati? Dove vengono allocati? Lo standard C pre-Ansi cosa specifica a riguardo?
Dovresti spiegarti meglio con un esempio.

Comunque:

Codice:
int func()
{
    int a = 5; // variabile allocata nello stack della funzione

    return a; // restituisce una copia del contenuto di a, quindi 5.
}

int* func()
{
    int a = 5; // variabile allocata nello stack della funzione

    return &a;
      /* restituisce l'indirizzo di a, che però è nello stack della funzione, ergo molto probabilmente non sarà valido fuori dalla funzione. */
}
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 08-09-2011, 09:34   #3
clockover
Senior Member
 
L'Avatar di clockover
 
Iscritto dal: Oct 2004
Messaggi: 1945
Ti riferisci per caso a come viene tradotto in assembly! Se è così da uno sguardo a questo documento http://www.dis.uniroma1.it/~demetres...oad/aebook.pdf

su questo invece http://eli.thegreenplace.net/2011/09...out-on-x86-64/ si parla solo di stack frame, però è fatto bene
clockover è offline   Rispondi citando il messaggio o parte di esso
Old 08-09-2011, 12:11   #4
Freaxxx
Senior Member
 
L'Avatar di Freaxxx
 
Iscritto dal: Dec 2006
Messaggi: 3808
Quote:
Originariamente inviato da WarDuck Guarda i messaggi
Dovresti spiegarti meglio con un esempio.

Comunque:

Codice:
int func()
{
    int a = 5; // variabile allocata nello stack della funzione

    return a; // restituisce una copia del contenuto di a, quindi 5.
}

int* func()
{
    int a = 5; // variabile allocata nello stack della funzione

    return &a;
      /* restituisce l'indirizzo di a, che però è nello stack della funzione, ergo molto probabilmente non sarà valido fuori dalla funzione. */
}
penso che clockover ci sia andato più vicino, comunque sia, per quanto riguarda l'operatore & non è corretto dire che restituisce un indirizzo, restituisce un puntatore che ha come contenuto l'indirizzo della variabile la cui etichetta è posta alla destra dell'operatore.

Quote:
Originariamente inviato da clockover Guarda i messaggi
Ti riferisci per caso a come viene tradotto in assembly! Se è così da uno sguardo a questo documento http://www.dis.uniroma1.it/~demetres...oad/aebook.pdf

su questo invece http://eli.thegreenplace.net/2011/09...out-on-x86-64/ si parla solo di stack frame, però è fatto bene
adesso li leggo, si cercavo una cosa del genere, grazie
Freaxxx è offline   Rispondi citando il messaggio o parte di esso
Old 08-09-2011, 16:00   #5
-MiStO-
Senior Member
 
Iscritto dal: May 2005
Città: Trieste
Messaggi: 2287
ciao
solo una precisazione: una reference è un concetto diverso da un puntatore
in quanto non è un tipo (com'è un puntatore) ma semplicemente un alias ad una variabile e le differenze ci sono (ptr può essere nullo mentre la reference no, la sizeof, gli operatori che non si applicano)
Quote:
restituisce un puntatore che ha come contenuto l'indirizzo della variabile la cui etichetta è posta alla destra dell'operatore
questo non è esattamente vero: dipende dall'implementazione nel compilatore, ovvio che quella più ovvia è un const ptr ma non è garantita questa cosa
se ti interessa approfondire trovi una breve spiegazione nella "bibbia" ( a.k.a. "the c++ programming language" di stroustrup )
__________________
neo mini v2 / asus strix z490i / 10600k@? / uh12s / rx6700xt / 32gb ddr4@3200 / sandisk 250 + asenno 1tb / lenovo g34w
trattative concluse : tante...

-MiStO- è offline   Rispondi citando il messaggio o parte di esso
Old 08-09-2011, 16:16   #6
Freaxxx
Senior Member
 
L'Avatar di Freaxxx
 
Iscritto dal: Dec 2006
Messaggi: 3808
Quote:
Originariamente inviato da -MiStO- Guarda i messaggi
ciao
solo una precisazione: una reference è un concetto diverso da un puntatore
in quanto non è un tipo (com'è un puntatore) ma semplicemente un alias ad una variabile e le differenze ci sono (ptr può essere nullo mentre la reference no, la sizeof, gli operatori che non si applicano)

questo non è esattamente vero: dipende dall'implementazione nel compilatore, ovvio che quella più ovvia è un const ptr ma non è garantita questa cosa
se ti interessa approfondire trovi una breve spiegazione nella "bibbia" ( a.k.a. "the c++ programming language" di stroustrup )
lo so, ma considerando il compilatore come variabile non si potrebbe studiare il C e il C++, si considera sempre il GCC come compilatore "standard" dato che è quello "affidabile e gratuito" sulla piazza cioé quello più diffuso, anche perché un compilatore per tanti altri comandi potrebbe tradurre in assembly come gli pare e piace, di possibili varianti ce ne sono tante.
Freaxxx è offline   Rispondi citando il messaggio o parte di esso
Old 08-09-2011, 22:07   #7
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12960
Quote:
Originariamente inviato da Freaxxx Guarda i messaggi
penso che clockover ci sia andato più vicino, comunque sia, per quanto riguarda l'operatore & non è corretto dire che restituisce un indirizzo, restituisce un puntatore che ha come contenuto l'indirizzo della variabile la cui etichetta è posta alla destra dell'operatore.
Credo ci si possa permettere la licenza di sostituire il contenitore per il contenuto . Comunque dal mio punto di vista la questione è irrilevante.

"Puntatore" è solo un nome come un altro per definire una variabile che contiene un indirizzo, per me quella funzione ritorna a tutti gli effetti un indirizzo di memoria (il cui contenuto può essere più o meno valido ma questo è un'altro discorso)...

Comunque relativamente alla questione del return, tipicamente (almeno nell'assembly MIPS è così) il valore di ritorno viene collocato in un registro particolare dedicato allo scopo così da poter essere utilizzato.

Un bell'esercizio per imparare l'assembly è creare funzioni ricorsive, lì capisci veramente bene come vengono gestiti stack e registri "temporanei".

Ultima modifica di WarDuck : 08-09-2011 alle 22:09.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 09-09-2011, 00:15   #8
clockover
Senior Member
 
L'Avatar di clockover
 
Iscritto dal: Oct 2004
Messaggi: 1945
Totalmente d'accordo con WarDuck. Anche perchè una funzione del genere altrimenti cosa ritornerebbe??

Codice:
unsigned long indirizzo(){
	return malloc(1);
}
ma anche questa (a prescindere dalla sua validità)

Codice:
unsigned long indirizzo(){
        int a = 10;
	return &a;
}
clockover è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Deep Tech Revolution: così Area Science Park apre i laboratori alle startup Deep Tech Revolution: così Area Science P...
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo HP OMEN MAX 16 con RTX 5080: potenza da desktop ...
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta Recensione Google Pixel 10a, si migliora poco ma...
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026 6G, da rete che trasporta dati a rete intelligen...
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso CHUWI CoreBook Air alla prova: design premium, b...
Silent Hill 2 Remake è un trionfo...
Logitech svende le periferiche: mouse ga...
Uno studio accusa i principali chatbot A...
Loot box e gioco d'azzardo: Valve ai fer...
Pulire casa al posto tuo? Il robot umano...
iPhone 17 da 256GB al minimo storico: or...
Quasi 6.000 giochi su Steam hanno supera...
Scope lavapavimenti super scontate: Drea...
WhatsApp prepara account dedicati ai min...
Nemotron 3 Super: modello AI open da 120...
Addio caricamenti lenti? Microsoft aggio...
Valve definisce i requisiti di certifica...
Microsoft accelera l'integrazione tra Xb...
Smartphone potenti sotto i 300€: ecco i ...
iPhone 18 Pro: le ultime sulle novit&agr...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 11:07.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v