Questo file di intestazione deve definire NULL
o size_t
e altre macro, ma trovo che /usr/include/linux/stddef.h
è vuoto? Perché?Perché /usr/include/linux/stddef.h è vuoto?
risposta
La posizione effettiva delle intestazioni è definita dall'implementazione. Quello che guardi non è il tipico <stddef.h>
incluso da gcc. È possibile sapere esattamente dove si trova il vostro sistema con:
gcc -E - <<<'#include<stddef.h>' | grep stddef.h
che equivale ad includere l'intestazione <stddef.h>
in un file C vuoto e funzionante gcc -E
su di esso.
Le intestazioni in /usr/include/linux
vengono utilizzate per compilare la libreria C (in genere glibc su Linux). Il GNU manual dice:
Il Linux, asm e ASM-generic directory sono tenuti a compilare i programmi che utilizzano la libreria GNU C; le altre directory descrivono interfacce al kernel ma non sono necessarie se non sono compilazione di programmi che utilizzano tali interfacce. Non è necessario copiare le intestazioni del kernel se non si specifica un'intestazione del kernel alternativa utilizzando '--with-headers'.
mentre le intestazioni di libreria C in genere sono posizionate da qualche parte in /usr/lib/
. Sulla mia ubuntu 15.04, l'intestazione /usr/include/linux/stddef.h
è vuota. Ma sul mio CentOS, ha:
#ifndef _LINUX_STDDEF_H
#define _LINUX_STDDEF_H
#undef NULL
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
La linea di fondo è, questo non è il stddef.h
che ti interessa e, in generale, non si dovrebbe fare alcuna ipotesi circa la posizione dei file di intestazione standard.
fa '- <<<' è una sintassi specifica per 'gcc', cioè non è valida nella shell – zhy
@zhy' -' è qualcosa che gcc capisce. Significa "leggere l'input dallo standard input". OTOH, '<<<' è specifico per bash (che è la shell di default sulla maggior parte delle distribuzioni Linux), chiamato come "here strings". Se '<<<' non è disponibile, puoi scrivere lo stesso di: 'echo '#include
Capisco ora. '<<<' significa una stringa qui, '<<' è un documento qui. Grazie! – zhy
- 1. Perché VM Tracker è vuoto?
- 2. XmlNodeList (perché è questo vuoto)
- 3. Perché il mio CONTEXT_INFO() è vuoto?
- 4. Perché il mio CommandArgument è vuoto?
- 5. Perché HttpContext.Current.User.Identity.Name restituisce vuoto
- 6. mio httpd.conf è vuoto
- 7. Perché un valore letterale stringa vuoto è considerato true?
- 8. Perché la somma di un set vuoto è nulla?
- 9. jQuery Mobile navigate - Perché lo stato è vuoto?
- 10. Perché il mio ripetitore è vuoto nel codice?
- 11. Perché il sito di aggiornamento di Galileo è vuoto?
- 12. La trasmissione a vuoto (non il puntatore) è consentita, perché?
- 13. Perché è consentito un valore letterale wchar_t vuoto?
- 14. Perché l'hash dell'env rack è vuoto nell'ambiente di test Rails?
- 15. il clone git è vuoto? perché questo accade
- 16. da MemoryStream è vuoto
- 17. CommPortIdentifier.getPortIdentifiers è vuoto
- 18. getAnnotations() è vuoto
- 19. NSString è vuoto
- 20. angolare $ routeParams è vuoto
- 21. Jenkins è praticamente vuoto
- 22. Android DialogFragment è vuoto
- 23. IEnumerable è vuoto?
- 24. youtube iFrame è vuoto
- 25. $ _SERVER ['PHP_AUTH_USER'] è vuoto
- 26. NSMutableArray è vuoto dopo addObject
- 27. controllare se NSNumber è vuoto
- 28. Express + Postman, req.body è vuoto
- 29. errore: il file oggetto è vuoto .git/objects /../ .. è vuoto - fatale: oggetto sciolto ... è corrotto
- 30. Perché C# usa il vuoto implicito Main?
http://clang.llvm.org/doxygen/stddef_8h_source.html – moffeltje
Nominalmente, si include '/ usr/include/stddef.h' quando si scrive' #include '. Quello che fa è fino all'implementazione. Forse non c'è nulla di necessario nell'intestazione 'linux/stddef.h' - quella standard, o un'intestazione inclusa da un'altra sottodirectory, contiene tutto ciò che è necessario. –