Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Le soluzioni FSP per il 2026: potenza e IA al centro
Le soluzioni FSP per il 2026: potenza e IA al centro
In occasione del Tech Tour 2025 della European Hardware Association abbiamo incontrato a Taiwan FSP, azienda impegnata nella produzione di alimentatori, chassis e soluzioni di raffreddamento tanto per clienti OEM come a proprio marchio. Potenze sempre più elevate negli alimentatori per far fronte alle necessità delle elaborazioni di intelligenza artificiale.
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS è il principale operatore di servizi cloud al mondo e da tempo parla delle misure che mette in atto per garantire una maggiore sovranità alle organizzazioni europee. L'azienda ha ora lanciato AWS European Sovereign Cloud, una soluzione specificamente progettata per essere separata e distinta dal cloud "normale" e offrire maggiori tutele e garanzie di sovranità
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Xiaomi ha portato sul mercato internazionale la nuova serie Redmi Note, che rappresenta spesso una delle migliori scelte per chi non vuole spendere molto. Il modello 15 Pro+ punta tutto su una batteria capiente e su un ampio display luminoso, sacrificando qualcosa in termini di potenza bruta e velocità di ricarica
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-06-2012, 12: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 12:46.
Lazy Bit è offline   Rispondi citando il messaggio o parte di esso
Old 24-06-2012, 14: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 14:26.
__ZERO_UNO__ è offline   Rispondi citando il messaggio o parte di esso
Old 24-06-2012, 18: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 18:31.
Lazy Bit è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2012, 10: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, 10: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, 16: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 17:20.
Lazy Bit è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2012, 23: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


Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
La cometa interstellare 3I/ATLAS e le nu...
Blue Origin presenta TeraWave, una nuova...
Compra una GeForce RTX 5080 venduta e sp...
Telescopio spaziale James Webb: osservat...
L'IA non ha portato quasi nessun benefic...
Sony LinkBuds Clip, gli auricolari open ...
La fibra è sempre più diff...
Arriva Vertiv CoolPhase PAM: raffreddame...
Chiamate cristalline e ANC evoluto a pre...
Adobe aggiorna Premiere e After Effects:...
AI Bundle, la novità dei driver A...
La roadster elettrica supportata da Xiao...
Netflix rivede l'offerta per Warner Bros...
Satya Nadella avverte: senza benefici co...
Anche secondo Andy Jassy, CEO di Amazon,...
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: 00:55.


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