Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-06-2012, 11:42   #1
Lazy Bit
Member
 
Iscritto dal: May 2011
Messaggi: 47
[C] Piccolo problema con gli #include

Ciao a tutti,

ho suddiviso un programma su più file, ma al momento della compilazione sembra che gli #include non includano come dovrebbero. Il discorso è un po' contorto, ma cercherò di spiegarmi meglio:

Il sorgente è costituito da un file_principale.c e un file_principale.h, entrambi nella stessa directory.

In file_principale.c è presente un #include "supporto.h", con il quale è mia intenzione caricare sia supporto.h sia il relativo supporto.c (contentente funzioni e definizioni di tipo usate da file_principale.c). Infine, in main.c, scrivo solo #include "file_principale.h". Beh, quando compilo il progetto tutti i file sopracitati sono inclusi, ma il file_principale.c non riconosce le definizioni e le funzioni presenti in supporto.c... Per quale motivo?


main.c -----> #include "file_principale.h"

file_principale.c -----> #include "supporto.h"

main.c non riconosce le funzioni e i tipi definiti in supporto.c

Ultima modifica di Lazy Bit : 24-06-2012 alle 11:46.
Lazy Bit è offline   Rispondi citando il messaggio o parte di esso
Old 24-06-2012, 13:20   #2
__ZERO_UNO__
Member
 
L'Avatar di __ZERO_UNO__
 
Iscritto dal: Jul 2009
Città: Milano
Messaggi: 270
in supporto.h definisci l'interfaccia delle funzioni di supporto ed eventuali classi e attributi. Includi il file supporto.h dal file supporto.c e definisci le funzioni. In file_principale.h includi il file header supporto.h e definisci l'interfaccia delle funzioni principali ecc. In file_principale.c includi il file file_principale.h. In main.c includi file_principale.h.
Utilizza le guardie.

supporto.h
Codice:
#ifndef _SUPPORTO_H_
#define _SUPPORTO_H_ 1
// ...

#endif
supporto.c
Codice:
#include "supporto.h"
// ...
file_principale.h
Codice:
#ifndef _FILEPRINCIPALE_H_
#define _FILEPRINCIPALE_H_ 1
#include "supporto.h"
// ...
#endif
file_principale.c
Codice:
#include "file_principale.h"
// ...
Ciao
__________________

AMD PII x4 955 BE | Sapphire HD4850 Vapor-X 1 GB | Samsung SpinPoint F1 500GB | Samsung EcoGreen F4 2TB
Gigabyte GA-MA790FXT-UD5P | Fractal Design Define R3 USB3.0 Titanium Grey | CORSAIR 650W CMPSU-650TX
Noctua U12P SE2 | 2 x 2GB Kingston 1333 MHz | Samsung SyncMaster P2450 | Samsung SyncMaster T200

Ultima modifica di __ZERO_UNO__ : 24-06-2012 alle 13:26.
__ZERO_UNO__ è offline   Rispondi citando il messaggio o parte di esso
Old 24-06-2012, 17:24   #3
Lazy Bit
Member
 
Iscritto dal: May 2011
Messaggi: 47
Ma se scrivo #include "supporto.h" nel file principale non dovrebbe caricarmi automaticamente anche il relativo supporto.c? Sapevo così, eppure mi dà errore... Comunque grazie mille! Adesso funziona

Ultima modifica di Lazy Bit : 24-06-2012 alle 17:31.
Lazy Bit è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2012, 09:32   #4
bender86
Member
 
L'Avatar di bender86
 
Iscritto dal: Mar 2008
Messaggi: 47
Quote:
Originariamente inviato da Lazy Bit Guarda i messaggi
Ma se scrivo #include "supporto.h" nel file principale non dovrebbe caricarmi automaticamente anche il relativo supporto.c? Sapevo così, eppure mi dà errore... Comunque grazie mille! Adesso funziona
No. La direttiva del preprocessore #include<nomefile> si limita a copiare pari pari il file nomefile nel file corrente (eventualmente espandendo altre direttive del preprocessore). Il contenuto di nomefile, o se esista un nomefile.c, è completamente irrilevante.
In C++ per usare una funzione (o classe, variabile...) devi averla prima dichiarata nello stesso file. Per semplificare le cose si usano le direttive #include<>, così puoi scrivere la dichiarazione una volta per tutte in un file .h e includere quel file dove usi quella funzione.
Potresti anche non includere mai nessun file e ripetere ogni volta i prototipi delle funzioni e le dichiarazioni delle classi che usi, ma ovviamente è scomodissimo (soprattutto se modifichi una classe devi ripetere la modifica in ogni file).

@__ZERO_UNO__
In C++ tutti i nomi che iniziano con underscore seguiti da una lettera maiuscola sono riservati, non si possono usare, quindi le tue guardie di inclusione non vanno bene. Meglio usare:
Codice:
#ifndef SUPPORTO_H
#define SUPPORTO_H
// ...
#endif
o ancora meglio:
Codice:
#ifndef NOMEPROGETTO_SUPPORTO_H
#define NOMEPROGETTO_SUPPORTO_H
// ...
#endif
bender86 è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2012, 09:39   #5
__ZERO_UNO__
Member
 
L'Avatar di __ZERO_UNO__
 
Iscritto dal: Jul 2009
Città: Milano
Messaggi: 270
Non lo sapevo. Ho controllato, hai ragione.
Grazie.
__________________

AMD PII x4 955 BE | Sapphire HD4850 Vapor-X 1 GB | Samsung SpinPoint F1 500GB | Samsung EcoGreen F4 2TB
Gigabyte GA-MA790FXT-UD5P | Fractal Design Define R3 USB3.0 Titanium Grey | CORSAIR 650W CMPSU-650TX
Noctua U12P SE2 | 2 x 2GB Kingston 1333 MHz | Samsung SyncMaster P2450 | Samsung SyncMaster T200
__ZERO_UNO__ è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2012, 15:46   #6
Lazy Bit
Member
 
Iscritto dal: May 2011
Messaggi: 47
Quote:
Originariamente inviato da bender86 Guarda i messaggi
No. La direttiva del preprocessore #include<nomefile> si limita a copiare pari pari il file nomefile nel file corrente (eventualmente espandendo altre direttive del preprocessore). Il contenuto di nomefile, o se esista un nomefile.c, è completamente irrilevante.
Credo che in parte abbia anch'io ragione. Infatti, se in main.c includo supporto.h (quest'ultimo contenente solo i prototipi di funzione), automaticamente è caricato supporto.c (che contiene le definizioni). Questo è sicuro (provare per credere)!

Sembra, però, che la cosa funzioni solo "al primo livello di inclusione", nel senso che se in supporto.c includo un altro file d'intestazione .h, il meccanismo a catena non funziona più, quindi mi ritrovo ad includere un file.c...

Ultima modifica di Lazy Bit : 26-06-2012 alle 16:20.
Lazy Bit è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2012, 22:52   #7
bender86
Member
 
L'Avatar di bender86
 
Iscritto dal: Mar 2008
Messaggi: 47
Quote:
Originariamente inviato da Lazy Bit Guarda i messaggi
Credo che in parte abbia anch'io ragione. Infatti, se in main.c includo supporto.h (quest'ultimo contenente solo i prototipi di funzione), automaticamente è caricato supporto.c (che contiene le definizioni). Questo è sicuro (provare per credere)!
No, è sicuro che se includi supporto.h includi solo supporto.h, nient'altro (con ovviamente i file inclusi in supporto.h). Dovresti spiegare cosa intendi con "caricato".
Quando usi una funzione non ti serve la sua definizione, basta la dichiarazione (il prototipo). Sarà poi il linker a trovare la definizione tra tutte le unità di compilazione (puoi anche provare a scrivere solo un prototipo, la compilazione andrà a buon fine ma il linker darà errore).
bender86 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Microsoft Defender: falso allarme sull'a...
Aerei in volo e truppe pronte all'assalt...
Usano Claude per hackerare OpenAI: ricer...
RatHat: il nuovo malware Android usa il ...
Domanda di petrolio in calo di 2,5 milio...
Il meglio delle offerte weekend Amazon a...
Dopo oltre 100 anni di tentativi, l'IA d...
Speciale robot aspirapolvere in offerta ...
L'IA sta cancellando i lavori junior? Il...
Debutta Chery Italia: non più sol...
Addio ai dischi? Xbox ci aveva già...
Speciale TV Amazon: 4 modelli, da 139€ f...
Il nuovo iPhone 18 Pro Max ha una ricari...
Speciale smartphone Android: 7 modelli i...
La Camera USA presenta il conto: i data ...
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: 12:52.


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