-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathfeature_test_macro.cli.txt
94 lines (76 loc) · 4.74 KB
/
feature_test_macro.cli.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
┏━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ FEATURE_TEST_MACRO ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━┛
FEATURE TEST MACRO ==> #Une feature test macro est un moyen utilisé par gcc
#pour contrôler des ajouts de fonctionnalités.
#Contrairement, les headers de glibc font des #ifdef
#en fonction de mots-clefs pour déclarer des fonctions
#ou non.
#Ces fonctions sont celles définies par certains
#standards.
#Ainsi, tout cela fonctionne avec glibc et gcc
#Les fonctions placées dans ma documentations
#personnelle sous le nom de macros sont activées par
#cette macro : toutefois d'autres sont placées là même
#si la macro est inutile, juste pour indiquer qu'il
#s'agit tout de même de fonctions liées à BSD, POSIX,
#etc.
#Doit donc défini avec les #include (headers)
#Les macros ont parfois des chiffres pour spécifier la
#version du standard/extension
ISO C ==> #Pas besoin de feature test macro pour inclure C95
#(toujours inclus)
#define _POSIX_SOURCE #POSIX.1 (1990)
#define _POSIX_C_SOURCE #Si VAL est :
VAL # - >=1, POSIX.1 inclus
# - >=2, POSIX.2 (1992) inclus
# - >=199309L, POSIX.1b (1993) inclus
# - >=199506L, POSIX.1 de 1996 inclus
# - >=200112L, POSIX.1-2001 inclus
# - >=200809L, POSIX.1-2008 inclus
#Dans tous les cas, inclusion de _POSIX_SOURCE
#define _BSD_SOURCE #4.3 BSD. Inclusion de _POSIX_C_SOURCE (= 2)
#define _SVID_SOURCE #SVID. Inclusion de _XOPEN_SOURCE (= 500)
#define _XOPEN_SOURCE #XPG
#Si VAL est = 500, cela inclut aussi SUSv2 (inclusion
#de _POSIX_C_SOURCE = 199506L)
#Si VAL est = 600, cela inclut aussi SUSv3 (inclusion
#de _POSIX_C_SOURCE = 200112L)
#Si VAL est = 700, cela inclut aussi SUSv4 (soit
#POSIX.1-2008 + extension XSI) (inclusion de
#_POSIX_C_SOURCE = 200809L)
#Inclusion de _SVID_SOURCE, _BSD_SOURCE.
#Si >= 500, inclusion de _XOPEN_SOURCE_EXTENDED
#define _XOPEN_SOURCE_ #Extensions de XPG. _XOPEN_SOURCE doit aussi être défini
EXTENDED
#define _LARGEFILE_ #Extension pour supporter les fichiers très gros
SOURCE
#define _LARGEFILE64_ #Extention pour supporter les fichiers >= 2GB, seulement
SOURCE #sur les systèmes 32 bits (car 64 bits le peuvent)
#pouvant faire "comme s'ils étaient 64 bits"
#define _FILE_OFFSET_ #Si = 64, comme _LARGEFILE64_SOURCE, mais remplace les
BITS #fonctionnalités, plutôt que les ajouter (les anciennes
#fonctions pointent vers les nouvelles). A préférer.
#define _ATFILE_SOURCE #Extensions avec le suffixe "at"
#define _ISOC99_SOURCE #C99
#define _GNU_SOURCE #Extensions GNU.
#Inclusion de _XOPEN_SOURCE (= 700),
#_LARGEFILE64_SOURCE, _REENTRANT, _THREAD_SAFE,
#_POSIX_C_SOURCE (= 200809L), _ISOC99_SOURCE et
#_ATFILE_SOURCE
#define _REENTRANT #Fonctions réentrantes
#define _THREAD_SAFE #Fonctions thread-safe
DEFAULT ==> #Par défaut, sont activés :
# - POSIX_C_SOURCE (= 200809L)
# - _BSD_SOURCE (= 1)
# - _SVID_SOURCE
#Avec l'option -ansi de gcc, aucun feature macro n'est
#activé
INCOMPATIBILITE AVEC #Toutes les macros sont compatibles et leur ordre
BSD ==> #n'importe pas, saud pour _BSD_SOURCE, qui redéfinit des
#choses définies par _POSIX_C_SOURCE (POSIX.1). Il faut
#donc, pour activer ces dernières, rajouter l'option
#-lbsd-compat à gcc.
#De plus, il faut que _BSD_SOURCE soit déclaré tel quel
#et en dernier lieu après d'autres macros déclarant
#_POSIX_C_SOURCE (POSIX.1)