1、安装gcc
sudo pacman -S gcc //基本都默认安装了
也可以源码安装最新版本
gcc --version //查看安装版本
或者gcc -v
2、常用编译C代码:
gcc -Wall fileName.c //默认生成可执行文件a.out,若当前目录下已有a.out则自动覆盖
或者gcc -Wall fileName.c -o fileName //通过-o选项生成指定名称fileName的可执行文件
3、控制编译过程,逐步实现:
1 #include <stdio.h>
2
3 int main(int argc, char **argv)
4 {
5 //program c no out function, lib printf function
6 printf("Hello world!\n");
7
8 return 0;
9 }
1)、预处理
gcc -E fileName.c -o fileName.i //删除注释
1 # 0 "hello.c"
2 # 0 "<built-in>"
3 # 0 "<命令行>"
4 # 1 "/usr/include/stdc-predef.h" 1 3 4
5 # 0 "<命令行>" 2
6 # 1 "hello.c"
7 # 1 "/usr/include/stdio.h" 1 3 4
8 # 27 "/usr/include/stdio.h" 3 4
9 # 1 "/usr/include/bits/libc-header-start.h" 1 3 4
10 # 33 "/usr/include/bits/libc-header-start.h" 3 4
11 # 1 "/usr/include/features.h" 1 3 4
12 # 473 "/usr/include/features.h" 3 4
13 # 1 "/usr/include/sys/cdefs.h" 1 3 4
14 # 462 "/usr/include/sys/cdefs.h" 3 4
15 # 1 "/usr/include/bits/wordsize.h" 1 3 4
16 # 463 "/usr/include/sys/cdefs.h" 2 3 4
17 # 1 "/usr/include/bits/long-double.h" 1 3 4
18 # 464 "/usr/include/sys/cdefs.h" 2 3 4
19 # 474 "/usr/include/features.h" 2 3 4
20 # 497 "/usr/include/features.h" 3 4
21 # 1 "/usr/include/gnu/stubs.h" 1 3 4
22 # 10 "/usr/include/gnu/stubs.h" 3 4
23 # 1 "/usr/include/gnu/stubs-64.h" 1 3 4
24 # 11 "/usr/include/gnu/stubs.h" 2 3 4
25 # 498 "/usr/include/features.h" 2 3 4
26 # 34 "/usr/include/bits/libc-header-start.h" 2 3 4
27 # 28 "/usr/include/stdio.h" 2 3 4
28
29
30
31
32
33 # 1 "/usr/lib/gcc/x86_64-pc-linux-gnu/11.1.0/include/stddef.h" 1 3 4
34 # 209 "/usr/lib/gcc/x86_64-pc-linux-gnu/11.1.0/include/stddef.h" 3 4
35
36 # 209 "/usr/lib/gcc/x86_64-pc-linux-gnu/11.1.0/include/stddef.h" 3 4
37 typedef long unsigned int size_t;
38 # 34 "/usr/include/stdio.h" 2 3 4
39
40
41 # 1 "/usr/lib/gcc/x86_64-pc-linux-gnu/11.1.0/include/stdarg.h" 1 3 4
42 # 40 "/usr/lib/gcc/x86_64-pc-linux-gnu/11.1.0/include/stdarg.h" 3 4
43 typedef __builtin_va_list __gnuc_va_list;
44 # 37 "/usr/include/stdio.h" 2 3 4
45
46 # 1 "/usr/include/bits/types.h" 1 3 4
47 # 27 "/usr/include/bits/types.h" 3 4
48 # 1 "/usr/include/bits/wordsize.h" 1 3 4
49 # 28 "/usr/include/bits/types.h" 2 3 4
50 # 1 "/usr/include/bits/timesize.h" 1 3 4
51 # 29 "/usr/include/bits/types.h" 2 3 4
52
53
54 typedef unsigned char __u_char;
55 typedef unsigned short int __u_short;
56 typedef unsigned int __u_int;
57 typedef unsigned long int __u_long;
58
59
60 typedef signed char __int8_t;
61 typedef unsigned char __uint8_t;
62 typedef signed short int __int16_t;
63 typedef unsigned short int __uint16_t;
64 typedef signed int __int32_t;
65 typedef unsigned int __uint32_t;
66
67 typedef signed long int __int64_t;
68 typedef unsigned long int __uint64_t;
69
70
71
72
73
74
75 typedef __int8_t __int_least8_t;
76 typedef __uint8_t __uint_least8_t;
77 typedef __int16_t __int_least16_t;
78 typedef __uint16_t __uint_least16_t;
79 typedef __int32_t __int_least32_t;
80 typedef __uint32_t __uint_least32_t;
81 typedef __int64_t __int_least64_t;
82 typedef __uint64_t __uint_least64_t;
83
84
85
86 typedef long int __quad_t;
87 typedef unsigned long int __u_quad_t;
88
89
90
91
92
93
94
95 typedef long int __intmax_t;
96 typedef unsigned long int __uintmax_t;
97 # 141 "/usr/include/bits/types.h" 3 4
98 # 1 "/usr/include/bits/typesizes.h" 1 3 4
99 # 142 "/usr/include/bits/types.h" 2 3 4
100 # 1 "/usr/include/bits/time64.h" 1 3 4
101 # 143 "/usr/include/bits/types.h" 2 3 4
102
103
104 typedef unsigned long int __dev_t;
105 typedef unsigned int __uid_t;
106 typedef unsigned int __gid_t;
107 typedef unsigned long int __ino_t;
108 typedef unsigned long int __ino64_t;
109 typedef unsigned int __mode_t;
110 typedef unsigned long int __nlink_t;
111 typedef long int __off_t;
112 typedef long int __off64_t;
113 typedef int __pid_t;
114 typedef struct { int __val[2]; } __fsid_t;
115 typedef long int __clock_t;
116 typedef unsigned long int __rlim_t;
117 typedef unsigned long int __rlim64_t;
118 typedef unsigned int __id_t;
119 typedef long int __time_t;
120 typedef unsigned int __useconds_t;
121 typedef long int __suseconds_t;
122 typedef long int __suseconds64_t;
123
124 typedef int __daddr_t;
125 typedef int __key_t;
126
127
128 typedef int __clockid_t;
129
130
131 typedef void * __timer_t;
132
133
134 typedef long int __blksize_t;
135
136
137
138
139 typedef long int __blkcnt_t;
140 typedef long int __blkcnt64_t;
141
142
143 typedef unsigned long int __fsblkcnt_t;
144 typedef unsigned long int __fsblkcnt64_t;
145
146
147 typedef unsigned long int __fsfilcnt_t;
148 typedef unsigned long int __fsfilcnt64_t;
149
150
151 typedef long int __fsword_t;
152
153 typedef long int __ssize_t;
154
155
156 typedef long int __syscall_slong_t;
157
158 typedef unsigned long int __syscall_ulong_t;
159
160
161
162 typedef __off64_t __loff_t;
163 typedef char *__caddr_t;
164
165
166 typedef long int __intptr_t;
167
168
169 typedef unsigned int __socklen_t;
170
171
172
173
174 typedef int __sig_atomic_t;
175 # 39 "/usr/include/stdio.h" 2 3 4
176 # 1 "/usr/include/bits/types/__fpos_t.h" 1 3 4
177
178
179
180
181 # 1 "/usr/include/bits/types/__mbstate_t.h" 1 3 4
182 # 13 "/usr/include/bits/types/__mbstate_t.h" 3 4
183 typedef struct
184 {
185 int __count;
186 union
187 {
188 unsigned int __wch;
189 char __wchb[4];
190 } __value;
191 } __mbstate_t;
192 # 6 "/usr/include/bits/types/__fpos_t.h" 2 3 4
193
194
195
196
197 typedef struct _G_fpos_t
198 {
199 __off_t __pos;
200 __mbstate_t __state;
201 } __fpos_t;
202 # 40 "/usr/include/stdio.h" 2 3 4
203 # 1 "/usr/include/bits/types/__fpos64_t.h" 1 3 4
204 # 10 "/usr/include/bits/types/__fpos64_t.h" 3 4
205 typedef struct _G_fpos64_t
206 {
207 __off64_t __pos;
208 __mbstate_t __state;
209 } __fpos64_t;
210 # 41 "/usr/include/stdio.h" 2 3 4
211 # 1 "/usr/include/bits/types/__FILE.h" 1 3 4
212
213
214
215 struct _IO_FILE;
216 typedef struct _IO_FILE __FILE;
217 # 42 "/usr/include/stdio.h" 2 3 4
218 # 1 "/usr/include/bits/types/FILE.h" 1 3 4
219
220
221
222 struct _IO_FILE;
223
224
225 typedef struct _IO_FILE FILE;
226 # 43 "/usr/include/stdio.h" 2 3 4
227 # 1 "/usr/include/bits/types/struct_FILE.h" 1 3 4
228 # 35 "/usr/include/bits/types/struct_FILE.h" 3 4
229 struct _IO_FILE;
230 struct _IO_marker;
231 struct _IO_codecvt;
232 struct _IO_wide_data;
233
234
235
236
237 typedef void _IO_lock_t;
238
239
240
241
242
243 struct _IO_FILE
244 {
245 int _flags;
246
247
248 char *_IO_read_ptr;
249 char *_IO_read_end;
250 char *_IO_read_base;
251 char *_IO_write_base;
252 char *_IO_write_ptr;
253 char *_IO_write_end;
254 char *_IO_buf_base;
255 char *_IO_buf_end;
256
257
258 char *_IO_save_base;
259 char *_IO_backup_base;
260 char *_IO_save_end;
261
262 struct _IO_marker *_markers;
263
264 struct _IO_FILE *_chain;
265
266 int _fileno;
267 int _flags2;
268 __off_t _old_offset;
269
270
271 unsigned short _cur_column;
272 signed char _vtable_offset;
273 char _shortbuf[1];
274
275 _IO_lock_t *_lock;
276
277
278
279
280
281
282
283 __off64_t _offset;
284
285 struct _IO_codecvt *_codecvt;
286 struct _IO_wide_data *_wide_data;
287 struct _IO_FILE *_freeres_list;
288 void *_freeres_buf;
289 size_t __pad5;
290 int _mode;
291
292 char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
293 };
294 # 44 "/usr/include/stdio.h" 2 3 4
295 # 52 "/usr/include/stdio.h" 3 4
296 typedef __gnuc_va_list va_list;
297 # 63 "/usr/include/stdio.h" 3 4
298 typedef __off_t off_t;
299 # 77 "/usr/include/stdio.h" 3 4
300 typedef __ssize_t ssize_t;
301
302
303
304
305
306
307 typedef __fpos_t fpos_t;
308 # 133 "/usr/include/stdio.h" 3 4
309 # 1 "/usr/include/bits/stdio_lim.h" 1 3 4
310 # 134 "/usr/include/stdio.h" 2 3 4
311
312
313
314 extern FILE *stdin;
315 extern FILE *stdout;
316 extern FILE *stderr;
317
318
319
320
321
322
323 extern int remove (const char *__filename) __attribute__ ((__nothrow__ , __leaf__));
324
325 extern int rename (const char *__old, const char *__new) __attribute__ ((__nothrow__ , __leaf__));
326
327
328
329 extern int renameat (int __oldfd, const char *__old, int __newfd,
330 const char *__new) __attribute__ ((__nothrow__ , __leaf__));
331 # 173 "/usr/include/stdio.h" 3 4
332 extern FILE *tmpfile (void) ;
333 # 187 "/usr/include/stdio.h" 3 4
334 extern char *tmpnam (char *__s) __attribute__ ((__nothrow__ , __leaf__)) ;
335
336
337
338
339 extern char *tmpnam_r (char *__s) __attribute__ ((__nothrow__ , __leaf__)) ;
340 # 204 "/usr/include/stdio.h" 3 4
341 extern char *tempnam (const char *__dir, const char *__pfx)
342 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) ;
343
344
345
346
347
348
349
350 extern int fclose (FILE *__stream);
351
352
353
354
355 extern int fflush (FILE *__stream);
356 # 227 "/usr/include/stdio.h" 3 4
357 extern int fflush_unlocked (FILE *__stream);
358 # 246 "/usr/include/stdio.h" 3 4
359 extern FILE *fopen (const char *__restrict __filename,
360 const char *__restrict __modes) ;
361
362
363
364
365 extern FILE *freopen (const char *__restrict __filename,
366 const char *__restrict __modes,
367 FILE *__restrict __stream) ;
368 # 279 "/usr/include/stdio.h" 3 4
369 extern FILE *fdopen (int __fd, const char *__modes) __attribute__ ((__nothrow__ , __leaf__)) ;
370 # 292 "/usr/include/stdio.h" 3 4
371 extern FILE *fmemopen (void *__s, size_t __len, const char *__modes)
372 __attribute__ ((__nothrow__ , __leaf__)) ;
373
374
375
376
377 extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __attribute__ ((__nothrow__ , __leaf__)) ;
378
379
380
381
382
383 extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__));
384
385
386
387 extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
388 int __modes, size_t __n) __attribute__ ((__nothrow__ , __leaf__));
389
390
391
392
393 extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
394 size_t __size) __attribute__ ((__nothrow__ , __leaf__));
395
396
397 extern void setlinebuf (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
398
399
400
401
402
403
404
405 extern int fprintf (FILE *__restrict __stream,
406 const char *__restrict __format, ...);
407
408
409
410
411 extern int printf (const char *__restrict __format, ...);
412
413 extern int sprintf (char *__restrict __s,
414 const char *__restrict __format, ...) __attribute__ ((__nothrow__));
415
416
417
418
419
420 extern int vfprintf (FILE *__restrict __s, const char *__restrict __format,
421 __gnuc_va_list __arg);
422
423
424
425
426 extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg);
427
428 extern int vsprintf (char *__restrict __s, const char *__restrict __format,
429 __gnuc_va_list __arg) __attribute__ ((__nothrow__));
430
431
432
433 extern int snprintf (char *__restrict __s, size_t __maxlen,
434 const char *__restrict __format, ...)
435 __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 4)));
436
437 extern int vsnprintf (char *__restrict __s, size_t __maxlen,
438 const char *__restrict __format, __gnuc_va_list __arg)
439 __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 0)));
440 # 379 "/usr/include/stdio.h" 3 4
441 extern int vdprintf (int __fd, const char *__restrict __fmt,
442 __gnuc_va_list __arg)
443 __attribute__ ((__format__ (__printf__, 2, 0)));
444 extern int dprintf (int __fd, const char *__restrict __fmt, ...)
445 __attribute__ ((__format__ (__printf__, 2, 3)));
446
447
448
449
450
451
452
453 extern int fscanf (FILE *__restrict __stream,
454 const char *__restrict __format, ...) ;
455
456
457
458
459 extern int scanf (const char *__restrict __format, ...) ;
460
461 extern int sscanf (const char *__restrict __s,
462 const char *__restrict __format, ...) __attribute__ ((__nothrow__ , __leaf__));
463
464
465
466
467
468 # 1 "/usr/include/bits/floatn.h" 1 3 4
469 # 119 "/usr/include/bits/floatn.h" 3 4
470 # 1 "/usr/include/bits/floatn-common.h" 1 3 4
471 # 24 "/usr/include/bits/floatn-common.h" 3 4
472 # 1 "/usr/include/bits/long-double.h" 1 3 4
473 # 25 "/usr/include/bits/floatn-common.h" 2 3 4
474 # 120 "/usr/include/bits/floatn.h" 2 3 4
475 # 407 "/usr/include/stdio.h" 2 3 4
476
477
478
479 extern int fscanf (FILE *__restrict __stream, const char *__restrict __format, ...) __asm__ ("" "__isoc99_fscanf")
480
481 ;
482 extern int scanf (const char *__restrict __format, ...) __asm__ ("" "__isoc99_scanf")
483 ;
484 extern int sscanf (const char *__restrict __s, const char *__restrict __format, ...) __asm__ ("" "__isoc99_sscanf") __attribute__ ((__nothrow__ , __leaf__))
485
486 ;
487 # 435 "/usr/include/stdio.h" 3 4
488 extern int vfscanf (FILE *__restrict __s, const char *__restrict __format,
489 __gnuc_va_list __arg)
490 __attribute__ ((__format__ (__scanf__, 2, 0))) ;
491
492
493
494
495
496 extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg)
497 __attribute__ ((__format__ (__scanf__, 1, 0))) ;
498
499
500 extern int vsscanf (const char *__restrict __s,
501 const char *__restrict __format, __gnuc_va_list __arg)
502 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__format__ (__scanf__, 2, 0)));
503
504
505
506
507
508 extern int vfscanf (FILE *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vfscanf")
509
510
511
512 __attribute__ ((__format__ (__scanf__, 2, 0))) ;
513 extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vscanf")
514
515 __attribute__ ((__format__ (__scanf__, 1, 0))) ;
516 extern int vsscanf (const char *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vsscanf") __attribute__ ((__nothrow__ , __ leaf__))
517
518
519
520 __attribute__ ((__format__ (__scanf__, 2, 0)));
521 # 489 "/usr/include/stdio.h" 3 4
522 extern int fgetc (FILE *__stream);
523 extern int getc (FILE *__stream);
524
525
526
527
528
529 extern int getchar (void);
530
531
532
533
534
535
536 extern int getc_unlocked (FILE *__stream);
537 extern int getchar_unlocked (void);
538 # 514 "/usr/include/stdio.h" 3 4
539 extern int fgetc_unlocked (FILE *__stream);
540 # 525 "/usr/include/stdio.h" 3 4
541 extern int fputc (int __c, FILE *__stream);
542 extern int putc (int __c, FILE *__stream);
543
544
545
546
547
548 extern int putchar (int __c);
549 # 541 "/usr/include/stdio.h" 3 4
550 extern int fputc_unlocked (int __c, FILE *__stream);
551
552
553
554
555
556
557
558 extern int putc_unlocked (int __c, FILE *__stream);
559 extern int putchar_unlocked (int __c);
560
561
562
563
564
565
566 extern int getw (FILE *__stream);
567
568
569 extern int putw (int __w, FILE *__stream);
570
571
572
573
574
575
576
577 extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
578 __attribute__ ((__access__ (__write_only__, 1, 2)));
579 # 608 "/usr/include/stdio.h" 3 4
580 extern __ssize_t __getdelim (char **__restrict __lineptr,
581 size_t *__restrict __n, int __delimiter,
582 FILE *__restrict __stream) ;
583 extern __ssize_t getdelim (char **__restrict __lineptr,
584 size_t *__restrict __n, int __delimiter,
585 FILE *__restrict __stream) ;
586
587
588
589
590
591
592
593 extern __ssize_t getline (char **__restrict __lineptr,
594 size_t *__restrict __n,
595 FILE *__restrict __stream) ;
596
597
598
599
600
601
602
603 extern int fputs (const char *__restrict __s, FILE *__restrict __stream);
604
605
606
607
608
609 extern int puts (const char *__s);
610
611
612
613
614
615
616 extern int ungetc (int __c, FILE *__stream);
617
618
619
620
621
622
623 extern size_t fread (void *__restrict __ptr, size_t __size,
624 size_t __n, FILE *__restrict __stream) ;
625
626
627
628
629 extern size_t fwrite (const void *__restrict __ptr, size_t __size,
630 size_t __n, FILE *__restrict __s);
631 # 678 "/usr/include/stdio.h" 3 4
632 extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
633 size_t __n, FILE *__restrict __stream) ;
634 extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size,
635 size_t __n, FILE *__restrict __stream);
636
637
638
639
640
641
642
643 extern int fseek (FILE *__stream, long int __off, int __whence);
644
645
646
647
648 extern long int ftell (FILE *__stream) ;
649
650
651
652
653 extern void rewind (FILE *__stream);
654 # 712 "/usr/include/stdio.h" 3 4
655 extern int fseeko (FILE *__stream, __off_t __off, int __whence);
656
657
658
659
660 extern __off_t ftello (FILE *__stream) ;
661 # 736 "/usr/include/stdio.h" 3 4
662 extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);
663
664
665
666
667 extern int fsetpos (FILE *__stream, const fpos_t *__pos);
668 # 762 "/usr/include/stdio.h" 3 4
669 extern void clearerr (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
670
671 extern int feof (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;
672
673 extern int ferror (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;
674
675
676
677 extern void clearerr_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
678 extern int feof_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;
679 extern int ferror_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;
680
681
682
683
684
685
686
687 extern void perror (const char *__s);
688
689
690
691
692 extern int fileno (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;
693
694
695
696
697 extern int fileno_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;
698 # 799 "/usr/include/stdio.h" 3 4
699 extern FILE *popen (const char *__command, const char *__modes) ;
700
701
702
703
704
705 extern int pclose (FILE *__stream);
706
707
708
709
710
711 extern char *ctermid (char *__s) __attribute__ ((__nothrow__ , __leaf__));
712 # 839 "/usr/include/stdio.h" 3 4
713 extern void flockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
714
715
716
717 extern int ftrylockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;
718
719
720 extern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
721 # 857 "/usr/include/stdio.h" 3 4
722 extern int __uflow (FILE *);
723 extern int __overflow (FILE *, int);
724 # 874 "/usr/include/stdio.h" 3 4
725
726 # 2 "hello.c" 2
727
728
729 # 3 "hello.c"
730 int main(int argc, char **argv)
731 {
732
733 printf("Hello world!\n");
734
735 return 0;
736 }
gcc -E -C fileName.c -o fileName.i //不删除注释
1 # 0 "hello.c"
2 # 0 "<built-in>"
3 # 0 "<命令行>"
4 # 1 "/usr/include/stdc-predef.h" 1 3 4
5
6 # 1 "/usr/include/stdc-predef.h" 3 4
7 /* Copyright (C) 1991-2021 Free Software Foundation, Inc.
8 This file is part of the GNU C Library.
9
10 The GNU C Library is free software; you can redistribute it and/or
11 modify it under the terms of the GNU Lesser General Public
12 License as published by the Free Software Foundation; either
13 version 2.1 of the License, or (at your option) any later version.
14
15 The GNU C Library is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 Lesser General Public License for more details.
19
20 You should have received a copy of the GNU Lesser General Public
21 License along with the GNU C Library; if not, see
22 <https://www.gnu.org/licenses/>. */
23
24
25
26
27 /* This header is separate from features.h so that the compiler can
28 include it implicitly at the start of every compilation. It must
29 not itself include <features.h> or any other header that includes
30 <features.h> because the implicit include comes before any feature
31 test macros that may be defined in a source file before it first
32 explicitly includes a system header. GCC knows the name of this
33 header in order to preinclude it. */
34
35 /* glibc's intent is to support the IEC 559 math functionality, real
36 and complex. If the GCC (4.9 and later) predefined macros
37 specifying compiler intent are available, use them to determine
38 whether the overall intent is to support these features; otherwise,
39 presume an older compiler has intent to support these features and
40 define these macros by default. */
41 # 52 "/usr/include/stdc-predef.h" 3 4
42 /* wchar_t uses Unicode 10.0.0. Version 10.0 of the Unicode Standard is
43 synchronized with ISO/IEC 10646:2017, fifth edition, plus
44 the following additions from Amendment 1 to the fifth edition:
45 - 56 emoji characters
46 - 285 hentaigana
47 - 3 additional Zanabazar Square characters */
48 # 0 "<命令行>" 2
49 # 1 "hello.c"
50 # 1 "/usr/include/stdio.h" 1 3 4
51 /* Define ISO C stdio on top of C++ iostreams.
52 Copyright (C) 1991-2021 Free Software Foundation, Inc.
53 This file is part of the GNU C Library.
54
55 The GNU C Library is free software; you can redistribute it and/or
56 modify it under the terms of the GNU Lesser General Public
57 License as published by the Free Software Foundation; either
58 version 2.1 of the License, or (at your option) any later version.
59
60 The GNU C Library is distributed in the hope that it will be useful,
61 but WITHOUT ANY WARRANTY; without even the implied warranty of
62 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
63 Lesser General Public License for more details.
64
65 You should have received a copy of the GNU Lesser General Public
66 License along with the GNU C Library; if not, see
67 <https://www.gnu.org/licenses/>. */
68
69 /*
70 * ISO C99 Standard: 7.19 Input/output <stdio.h>
71 */
72
73
74
75
76
77 # 1 "/usr/include/bits/libc-header-start.h" 1 3 4
78 /* Handle feature test macros at the start of a header.
79 Copyright (C) 2016-2021 Free Software Foundation, Inc.
80 This file is part of the GNU C Library.
81
82 The GNU C Library is free software; you can redistribute it and/or
83 modify it under the terms of the GNU Lesser General Public
84 License as published by the Free Software Foundation; either
85 version 2.1 of the License, or (at your option) any later version.
86
87 The GNU C Library is distributed in the hope that it will be useful,
88 but WITHOUT ANY WARRANTY; without even the implied warranty of
89 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
90 Lesser General Public License for more details.
91
92 You should have received a copy of the GNU Lesser General Public
93 License along with the GNU C Library; if not, see
94 <https://www.gnu.org/licenses/>. */
95
96 /* This header is internal to glibc and should not be included outside
97 of glibc headers. Headers including it must define
98 __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION first. This header
99 cannot have multiple include guards because ISO C feature test
100 macros depend on the definition of the macro when an affected
101 header is included, not when the first system header is
102 included. */
103
104
105
106
107
108
109
110 # 1 "/usr/include/features.h" 1 3 4
111 /* Copyright (C) 1991-2021 Free Software Foundation, Inc.
112 This file is part of the GNU C Library.
113
114 The GNU C Library is free software; you can redistribute it and/or
115 modify it under the terms of the GNU Lesser General Public
116 License as published by the Free Software Foundation; either
117 version 2.1 of the License, or (at your option) any later version.
118
119 The GNU C Library is distributed in the hope that it will be useful,
120 but WITHOUT ANY WARRANTY; without even the implied warranty of
121 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
122 Lesser General Public License for more details.
123
124 You should have received a copy of the GNU Lesser General Public
125 License along with the GNU C Library; if not, see
126 <https://www.gnu.org/licenses/>. */
127
128
129
130
131 /* These are defined by the user (or the compiler)
132 to specify the desired environment:
133
134 __STRICT_ANSI__ ISO Standard C.
135 _ISOC99_SOURCE Extensions to ISO C89 from ISO C99.
136 _ISOC11_SOURCE Extensions to ISO C99 from ISO C11.
137 _ISOC2X_SOURCE Extensions to ISO C99 from ISO C2X.
138 __STDC_WANT_LIB_EXT2__
139 Extensions to ISO C99 from TR 27431-2:2010.
140 __STDC_WANT_IEC_60559_BFP_EXT__
141 Extensions to ISO C11 from TS 18661-1:2014.
142 __STDC_WANT_IEC_60559_FUNCS_EXT__
143 Extensions to ISO C11 from TS 18661-4:2015.
144 __STDC_WANT_IEC_60559_TYPES_EXT__
145 Extensions to ISO C11 from TS 18661-3:2015.
146
147 _POSIX_SOURCE IEEE Std 1003.1.
148 _POSIX_C_SOURCE If ==1, like _POSIX_SOURCE; if >=2 add IEEE Std 1003.2;
149 if >=199309L, add IEEE Std 1003.1b-1993;
150 if >=199506L, add IEEE Std 1003.1c-1995;
151 if >=200112L, all of IEEE 1003.1-2004
152 if >=200809L, all of IEEE 1003.1-2008
153 _XOPEN_SOURCE Includes POSIX and XPG things. Set to 500 if
154 Single Unix conformance is wanted, to 600 for the
155 sixth revision, to 700 for the seventh revision.
156 _XOPEN_SOURCE_EXTENDED XPG things and X/Open Unix extensions.
157 _LARGEFILE_SOURCE Some more functions for correct standard I/O.
158 _LARGEFILE64_SOURCE Additional functionality from LFS for large files.
159 _FILE_OFFSET_BITS=N Select default filesystem interface.
160 _ATFILE_SOURCE Additional *at interfaces.
161 _GNU_SOURCE All of the above, plus GNU extensions.
162 _DEFAULT_SOURCE The default set of features (taking precedence over
163 __STRICT_ANSI__).
164
165 _FORTIFY_SOURCE Add security hardening to many library functions.
166 Set to 1 or 2; 2 performs stricter checks than 1.
167
168 _REENTRANT, _THREAD_SAFE
169 Obsolete; equivalent to _POSIX_C_SOURCE=199506L.
170
171 The `-ansi' switch to the GNU C compiler, and standards conformance
172 options such as `-std=c99', define __STRICT_ANSI__. If none of
173 these are defined, or if _DEFAULT_SOURCE is defined, the default is
174 to have _POSIX_SOURCE set to one and _POSIX_C_SOURCE set to
175 200809L, as well as enabling miscellaneous functions from BSD and
176 SVID. If more than one of these are defined, they accumulate. For
177 example __STRICT_ANSI__, _POSIX_SOURCE and _POSIX_C_SOURCE together
178 give you ISO C, 1003.1, and 1003.2, but nothing else.
179
180 These are defined by this file and are used by the
181 header files to decide what to declare or define:
182
183 __GLIBC_USE (F) Define things from feature set F. This is defined
184 to 1 or 0; the subsequent macros are either defined
185 or undefined, and those tests should be moved to
186 __GLIBC_USE.
187 __USE_ISOC11 Define ISO C11 things.
188 __USE_ISOC99 Define ISO C99 things.
189 __USE_ISOC95 Define ISO C90 AMD1 (C95) things.
190 __USE_ISOCXX11 Define ISO C++11 things.
191 __USE_POSIX Define IEEE Std 1003.1 things.
192 __USE_POSIX2 Define IEEE Std 1003.2 things.
193 __USE_POSIX199309 Define IEEE Std 1003.1, and .1b things.
194 __USE_POSIX199506 Define IEEE Std 1003.1, .1b, .1c and .1i things.
195 __USE_XOPEN Define XPG things.
196 __USE_XOPEN_EXTENDED Define X/Open Unix things.
197 __USE_UNIX98 Define Single Unix V2 things.
198 __USE_XOPEN2K Define XPG6 things.
199 __USE_XOPEN2KXSI Define XPG6 XSI things.
200 __USE_XOPEN2K8 Define XPG7 things.
201 __USE_XOPEN2K8XSI Define XPG7 XSI things.
202 __USE_LARGEFILE Define correct standard I/O things.
203 __USE_LARGEFILE64 Define LFS things with separate names.
204 __USE_FILE_OFFSET64 Define 64bit interface as default.
205 __USE_MISC Define things from 4.3BSD or System V Unix.
206 __USE_ATFILE Define *at interfaces and AT_* constants for them.
207 __USE_GNU Define GNU extensions.
208 __USE_FORTIFY_LEVEL Additional security measures used, according to level.
209
210 The macros `__GNU_LIBRARY__', `__GLIBC__', and `__GLIBC_MINOR__' are
211 defined by this file unconditionally. `__GNU_LIBRARY__' is provided
212 only for compatibility. All new code should use the other symbols
213 to test for features.
214
215 All macros listed above as possibly being defined by this file are
216 explicitly undefined if they are not explicitly defined.
217 Feature-test macros that are not defined by the user or compiler
218 but are implied by the other feature-test macros defined (or by the
219 lack of any definitions) are defined by the file.
220
221 ISO C feature test macros depend on the definition of the macro
222 when an affected header is included, not when the first system
223 header is included, and so they are handled in
224 <bits/libc-header-start.h>, which does not have a multiple include
225 guard. Feature test macros that can be handled from the first
226 system header included are handled here. */
227
228
229 /* Undefine everything, so we get a clean slate. */
230 # 147 "/usr/include/features.h" 3 4
231 /* Suppress kernel-name space pollution unless user expressedly asks
232 for it. */
233
234
235
236
237 /* Convenience macro to test the version of gcc.
238 Use like this:
239 #if __GNUC_PREREQ (2,8)
240 ... code requiring gcc 2.8 or later ...
241 #endif
242 Note: only works for GCC 2.0 and later, because __GNUC_MINOR__ was
243 added in 2.0. */
244
245
246
247
248
249
250
251 /* Similarly for clang. Features added to GCC after version 4.2 may
252 or may not also be available in clang, and clang's definitions of
253 __GNUC(_MINOR)__ are fixed at 4 and 2 respectively. Not all such
254 features can be queried via __has_extension/__has_feature. */
255
256
257
258
259
260
261
262 /* Whether to use feature set F. */
263
264
265 /* _BSD_SOURCE and _SVID_SOURCE are deprecated aliases for
266 _DEFAULT_SOURCE. If _DEFAULT_SOURCE is present we do not
267 issue a warning; the expectation is that the source is being
268 transitioned to use the new macro. */
269
270
271
272
273
274
275
276 /* If _GNU_SOURCE was defined by the user, turn on all the other features. */
277 # 218 "/usr/include/features.h" 3 4
278 /* If nothing (other than _GNU_SOURCE and _DEFAULT_SOURCE) is defined,
279 define _DEFAULT_SOURCE. */
280 # 230 "/usr/include/features.h" 3 4
281 /* This is to enable the ISO C2X extension. */
282
283
284
285
286
287
288
289 /* This is to enable the ISO C11 extension. */
290
291
292
293
294
295 /* This is to enable the ISO C99 extension. */
296
297
298
299
300
301
302 /* This is to enable the ISO C90 Amendment 1:1995 extension. */
303 # 271 "/usr/include/features.h" 3 4
304 /* If none of the ANSI/POSIX macros are defined, or if _DEFAULT_SOURCE
305 is defined, use POSIX.1-2008 (or another version depending on
306 _XOPEN_SOURCE). */
307 # 300 "/usr/include/features.h" 3 4
308 /* Some C libraries once required _REENTRANT and/or _THREAD_SAFE to be
309 defined in all multithreaded code. GNU libc has not required this
310 for many years. We now treat them as compatibility synonyms for
311 _POSIX_C_SOURCE=199506L, which is the earliest level of POSIX with
312 comprehensive support for multithreaded code. Using them never
313 lowers the selected level of POSIX conformance, only raises it. */
314 # 418 "/usr/include/features.h" 3 4
315 /* The function 'gets' existed in C89, but is impossible to use
316 safely. It has been removed from ISO C11 and ISO C++14. Note: for
317 compatibility with various implementations of <cstdio>, this test
318 must consider only the value of __cplusplus when compiling C++. */
319
320
321
322
323
324
325 /* GNU formerly extended the scanf functions with modified format
326 specifiers %as, %aS, and %a[...] that allocate a buffer for the
327 input using malloc. This extension conflicts with ISO C99, which
328 defines %a as a standalone format specifier that reads a floating-
329 point number; moreover, POSIX.1-2008 provides the same feature
330 using the modifier letter 'm' instead (%ms, %mS, %m[...]).
331
332 We now follow C99 unless GNU extensions are active and the compiler
333 is specifically in C89 or C++98 mode (strict or not). For
334 instance, with GCC, -std=gnu11 will have C99-compliant scanf with
335 or without -D_GNU_SOURCE, but -std=c89 -D_GNU_SOURCE will have the
336 old extension. */
337 # 449 "/usr/include/features.h" 3 4
338 /* Get definitions of __STDC_* predefined macros, if the compiler has
339 not preincluded this header automatically. */
340 # 1 "/usr/include/stdc-predef.h" 1 3 4
341 /* Copyright (C) 1991-2021 Free Software Foundation, Inc.
342 This file is part of the GNU C Library.
343
344 The GNU C Library is free software; you can redistribute it and/or
345 modify it under the terms of the GNU Lesser General Public
346 License as published by the Free Software Foundation; either
347 version 2.1 of the License, or (at your option) any later version.
348
349 The GNU C Library is distributed in the hope that it will be useful,
350 but WITHOUT ANY WARRANTY; without even the implied warranty of
351 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
352 Lesser General Public License for more details.
353
354 You should have received a copy of the GNU Lesser General Public
355 License along with the GNU C Library; if not, see
356 <https://www.gnu.org/licenses/>. */
357 # 452 "/usr/include/features.h" 2 3 4
358
359 /* This macro indicates that the installed library is the GNU C Library.
360 For historic reasons the value now is 6 and this will stay from now
361 on. The use of this variable is deprecated. Use __GLIBC__ and
362 __GLIBC_MINOR__ now (see below) when you want to test for a specific
363 GNU C library version and use the values in <gnu/lib-names.h> to get
364 the sonames of the shared libraries. */
365
366
367
368 /* Major and minor version number of the GNU C library package. Use
369 these macros to test for features in specific releases. */
370
371
372
373
374
375
376 /* This is here only because every header file already includes this one. */
377
378
379 # 1 "/usr/include/sys/cdefs.h" 1 3 4
380 /* Copyright (C) 1992-2021 Free Software Foundation, Inc.
381 This file is part of the GNU C Library.
382
383 The GNU C Library is free software; you can redistribute it and/or
384 modify it under the terms of the GNU Lesser General Public
385 License as published by the Free Software Foundation; either
386 version 2.1 of the License, or (at your option) any later version.
387
388 The GNU C Library is distributed in the hope that it will be useful,
389 but WITHOUT ANY WARRANTY; without even the implied warranty of
390 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
391 Lesser General Public License for more details.
392
393 You should have received a copy of the GNU Lesser General Public
394 License along with the GNU C Library; if not, see
395 <https://www.gnu.org/licenses/>. */
396
397
398
399
400 /* We are almost always included from features.h. */
401
402
403
404
405 /* The GNU libc does not support any K&R compilers or the traditional mode
406 of ISO C compilers anymore. Check for some of the combinations not
407 supported anymore. */
408
409
410
411
412 /* Some user header file might have defined this before. */
413
414
415
416
417
418 /* All functions, except those with callbacks or those that
419 synchronize memory, are leaf functions. */
420 # 49 "/usr/include/sys/cdefs.h" 3 4
421 /* GCC can always grok prototypes. For C++ programs we add throw()
422 to help it optimize the function calls. But this only works with
423 gcc 2.8.x and egcs. For gcc 3.2 and up we even mark C functions
424 as non-throwing using a function attribute since programs can use
425 the -fexceptions options for C code as well. */
426 # 92 "/usr/include/sys/cdefs.h" 3 4
427 /* Compilers that are not clang may object to
428 #if defined __clang__ && __has_extension(...)
429 even though they do not need to evaluate the right-hand side of the &&. */
430
431
432
433
434
435
436 /* These two macros are not used in glibc anymore. They are kept here
437 only because some other projects expect the macros to be defined. */
438
439
440
441 /* For these things, GCC behaves the ANSI way normally,
442 and the non-ANSI way under -traditional. */
443
444
445
446
447 /* This is not a typedef so `const __ptr_t' does the right thing. */
448
449
450
451 /* C++ needs to know that types and declarations are C, not C++. */
452 # 126 "/usr/include/sys/cdefs.h" 3 4
453 /* Fortify support. */
454
455
456
457 /* Use __builtin_dynamic_object_size at _FORTIFY_SOURCE=3 when available. */
458 # 148 "/usr/include/sys/cdefs.h" 3 4
459 /* Support for flexible arrays.
460 Headers that should use flexible arrays only if they're "real"
461 (e.g. only if they won't affect sizeof()) should test
462 #if __glibc_c99_flexarr_available. */
463 # 172 "/usr/include/sys/cdefs.h" 3 4
464 /* __asm__ ("xyz") is used throughout the headers to rename functions
465 at the assembly language level. This is wrapped by the __REDIRECT
466 macro, in order to support compilers that can do this some other
467 way. When compilers don't support asm-names at all, we have to do
468 preprocessor tricks instead (which don't have exactly the right
469 semantics, but it's the best we can do).
470
471 Example:
472 int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */
473 # 199 "/usr/include/sys/cdefs.h" 3 4
474 /*
475 #elif __SOME_OTHER_COMPILER__
476
477 # define __REDIRECT(name, proto, alias) name proto; _Pragma("let " #name " = " #alias)
478 )
479 */
480
481
482 /* GCC has various useful declarations that can be made with the
483 `__attribute__' syntax. All of the ways we use this do fine if
484 they are omitted for compilers that don't understand it. */
485
486
487
488
489 /* At some point during the gcc 2.96 development the `malloc' attribute
490 for functions was introduced. We don't want to use it unconditionally
491 (although this would be possible) since it generates warnings. */
492
493
494
495
496
497
498 /* Tell the compiler which arguments to an allocation function
499 indicate the size of the allocation. */
500
501
502
503
504
505
506
507 /* At some point during the gcc 2.96 development the `pure' attribute
508 for functions was introduced. We don't want to use it unconditionally
509 (although this would be possible) since it generates warnings. */
510
511
512
513
514
515
516 /* This declaration tells the compiler that the value is constant. */
517
518
519
520
521
522
523 /* At some point during the gcc 3.1 development the `used' attribute
524 for functions was introduced. We don't want to use it unconditionally
525 (although this would be possible) since it generates warnings. */
526 # 259 "/usr/include/sys/cdefs.h" 3 4
527 /* Since version 3.2, gcc allows marking deprecated functions. */
528
529
530
531
532
533
534 /* Since version 4.5, gcc also allows one to specify the message printed
535 when a deprecated function is used. clang claims to be gcc 4.2, but
536 may also support this feature. */
537 # 277 "/usr/include/sys/cdefs.h" 3 4
538 /* At some point during the gcc 2.8 development the `format_arg' attribute
539 for functions was introduced. We don't want to use it unconditionally
540 (although this would be possible) since it generates warnings.
541 If several `format_arg' attributes are given for the same function, in
542 gcc-3.0 and older, all but the last one are ignored. In newer gccs,
543 all designated arguments are considered. */
544
545
546
547
548
549
550 /* At some point during the gcc 2.97 development the `strfmon' format
551 attribute for functions was introduced. We don't want to use it
552 unconditionally (although this would be possible) since it
553 generates warnings. */
554
555
556
557
558
559
560
561 /* The nonull function attribute allows to mark pointer parameters which
562 must not be NULL. */
563
564
565
566
567
568
569 /* If fortification mode, we warn about unused results of certain
570 function calls which can lead to problems. */
571 # 323 "/usr/include/sys/cdefs.h" 3 4
572 /* Forces a function to be always inlined. */
573
574 /* The Linux kernel defines __always_inline in stddef.h (283d7573), and
575 it conflicts with this definition. Therefore undefine it first to
576 allow either header to be included first. */
577
578
579
580
581
582
583
584 /* Associate error messages with the source location of the call site rather
585 than with the source location inside the function. */
586
587
588
589
590
591
592 /* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
593 inline semantics, unless -fgnu89-inline is used. Using __GNUC_STDC_INLINE__
594 or __GNUC_GNU_INLINE is not a good enough check for gcc because gcc versions
595 older than 4.3 may define these macros and still not guarantee GNU inlining
596 semantics.
597
598 clang++ identifies itself as gcc-4.2, but has support for GNU inlining
599 semantics, that can be checked for by using the __GNUC_STDC_INLINE_ and
600 __GNUC_GNU_INLINE__ macro definitions. */
601 # 369 "/usr/include/sys/cdefs.h" 3 4
602 /* GCC 4.3 and above allow passing all anonymous arguments of an
603 __extern_always_inline function to some other vararg function. */
604
605
606
607
608
609 /* It is possible to compile containing GCC extensions even if GCC is
610 run in pedantic mode if the uses are carefully marked using the
611 `__extension__' keyword. But this is not generally available before
612 version 2.8. */
613
614
615
616
617 /* __restrict is known in EGCS 1.2 and above. */
618 # 393 "/usr/include/sys/cdefs.h" 3 4
619 /* ISO C99 also allows to declare arrays as non-overlapping. The syntax is
620 array_name[restrict]
621 GCC 3.1 supports this. */
622 # 436 "/usr/include/sys/cdefs.h" 3 4
623 /* Describes a char array whose address can safely be passed as the first
624 argument to strncpy and strncat, as the char array is not necessarily
625 a NUL-terminated string. */
626
627
628
629
630
631 /* Undefine (also defined in libc-symbols.h). */
632
633
634 /* Copies attributes from the declaration or type referenced by
635 the argument. */
636 # 462 "/usr/include/sys/cdefs.h" 3 4
637 # 1 "/usr/include/bits/wordsize.h" 1 3 4
638 /* Determine the wordsize from the preprocessor defines. */
639 # 13 "/usr/include/bits/wordsize.h" 3 4
640 /* Both x86-64 and x32 use the 64-bit system call interface. */
641 # 463 "/usr/include/sys/cdefs.h" 2 3 4
642 # 1 "/usr/include/bits/long-double.h" 1 3 4
643 /* Properties of long double type. ldbl-96 version.
644 Copyright (C) 2016-2021 Free Software Foundation, Inc.
645 This file is part of the GNU C Library.
646
647 The GNU C Library is free software; you can redistribute it and/or
648 modify it under the terms of the GNU Lesser General Public
649 License published by the Free Software Foundation; either
650 version 2.1 of the License, or (at your option) any later version.
651
652 The GNU C Library is distributed in the hope that it will be useful,
653 but WITHOUT ANY WARRANTY; without even the implied warranty of
654 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
655 Lesser General Public License for more details.
656
657 You should have received a copy of the GNU Lesser General Public
658 License along with the GNU C Library; if not, see
659 <https://www.gnu.org/licenses/>. */
660
661 /* long double is distinct from double, so there is nothing to
662 define here. */
663 # 464 "/usr/include/sys/cdefs.h" 2 3 4
664 # 531 "/usr/include/sys/cdefs.h" 3 4
665 /* __glibc_macro_warning (MESSAGE) issues warning MESSAGE. This is
666 intended for use in preprocessor macros.
667
668 Note: MESSAGE must be a _single_ string; concatenation of string
669 literals is not supported. */
670 # 544 "/usr/include/sys/cdefs.h" 3 4
671 /* Generic selection (ISO C11) is a C-only feature, available in GCC
672 since version 4.9. Previous versions do not provide generic
673 selection, even though they might set __STDC_VERSION__ to 201112L,
674 when in -std=c11 mode. Thus, we must check for !defined __GNUC__
675 when testing __STDC_VERSION__ for generic selection support.
676 On the other hand, Clang also defines __GNUC__, so a clang-specific
677 check is required to enable the use of generic selection. */
678 # 562 "/usr/include/sys/cdefs.h" 3 4
679 /* Designates a 1-based positional argument ref-index of pointer type
680 that can be used to access size-index elements of the pointed-to
681 array according to access mode, or at least one element when
682 size-index is not provided:
683 access (access-mode, <ref-index> [, <size-index>]) */
684
685
686
687
688
689 /* Specify that a function such as setjmp or vfork may return
690 twice. */
691 # 474 "/usr/include/features.h" 2 3 4
692
693
694 /* If we don't have __REDIRECT, prototypes will be missing if
695 __USE_FILE_OFFSET64 but not __USE_LARGEFILE[64]. */
696
697
698
699
700
701
702
703 /* Decide whether we can define 'extern inline' functions in headers. */
704
705
706
707
708
709
710
711 /* This is here only because every header file already includes this one.
712 Get the definitions of all the appropriate `__stub_FUNCTION' symbols.
713 <gnu/stubs.h> contains `#define __stub_FUNCTION' when FUNCTION is a stub
714 that will always return failure (and set errno to ENOSYS). */
715 # 1 "/usr/include/gnu/stubs.h" 1 3 4
716 /* This file is automatically generated.
717 This file selects the right generated file of `__stub_FUNCTION' macros
718 based on the architecture being compiled for. */
719
720
721
722
723
724
725 # 1 "/usr/include/gnu/stubs-64.h" 1 3 4
726 /* This file is automatically generated.
727 It defines a symbol `__stub_FUNCTION' for each function
728 in the C library which is a stub, meaning it will fail
729 every time called, usually setting errno to ENOSYS. */
730 # 11 "/usr/include/gnu/stubs.h" 2 3 4
731 # 498 "/usr/include/features.h" 2 3 4
732 # 34 "/usr/include/bits/libc-header-start.h" 2 3 4
733
734 /* ISO/IEC TR 24731-2:2010 defines the __STDC_WANT_LIB_EXT2__
735 macro. */
736 # 45 "/usr/include/bits/libc-header-start.h" 3 4
737 /* ISO/IEC TS 18661-1:2014 defines the __STDC_WANT_IEC_60559_BFP_EXT__
738 macro. Most but not all symbols enabled by that macro in TS
739 18661-1 are enabled unconditionally in C2X; the symbols in Annex F
740 still require that macro in C2X. */
741 # 62 "/usr/include/bits/libc-header-start.h" 3 4
742 /* ISO/IEC TS 18661-4:2015 defines the
743 __STDC_WANT_IEC_60559_FUNCS_EXT__ macro. Other than the reduction
744 functions, the symbols from this TS are enabled unconditionally in
745 C2X. */
746 # 79 "/usr/include/bits/libc-header-start.h" 3 4
747 /* ISO/IEC TS 18661-3:2015 defines the
748 __STDC_WANT_IEC_60559_TYPES_EXT__ macro. */
749 # 28 "/usr/include/stdio.h" 2 3 4
750
751
752
753
754
755 # 1 "/usr/lib/gcc/x86_64-pc-linux-gnu/11.1.0/include/stddef.h" 1 3 4
756 /* Copyright (C) 1989-2021 Free Software Foundation, Inc.
757
758 This file is part of GCC.
759
760 GCC is free software; you can redistribute it and/or modify
761 it under the terms of the GNU General Public License as published by
762 the Free Software Foundation; either version 3, or (at your option)
763 any later version.
764
765 GCC is distributed in the hope that it will be useful,
766 but WITHOUT ANY WARRANTY; without even the implied warranty of
767 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
768 GNU General Public License for more details.
769
770 Under Section 7 of GPL version 3, you are granted additional
771 permissions described in the GCC Runtime Library Exception, version
772 3.1, as published by the Free Software Foundation.
773
774 You should have received a copy of the GNU General Public License and
775 a copy of the GCC Runtime Library Exception along with this program;
776 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
777 <http://www.gnu.org/licenses/>. */
778
779 /*
780 * ISO C Standard: 7.17 Common definitions <stddef.h>
781 */
782
783
784
785
786
787
788 /* Any one of these symbols __need_* means that GNU libc
789 wants us just to define one data type. So don't define
790 the symbols that indicate this file's entire job has been done. */
791 # 46 "/usr/lib/gcc/x86_64-pc-linux-gnu/11.1.0/include/stddef.h" 3 4
792 /* This avoids lossage on SunOS but only if stdtypes.h comes first.
793 There's no way to win with the other order! Sun lossage. */
794 # 86 "/usr/lib/gcc/x86_64-pc-linux-gnu/11.1.0/include/stddef.h" 3 4
795 /* Sequent's header files use _PTRDIFF_T_ in some conflicting way.
796 Just ignore it. */
797
798
799
800
801 /* On VxWorks, <type/vxTypesBase.h> may have defined macros like
802 _TYPE_size_t which will typedef size_t. fixincludes patched the
803 vxTypesBase.h so that this macro is only defined if _GCC_SIZE_T is
804 not defined, and so that defining this macro defines _GCC_SIZE_T.
805 If we find that the macros are still defined at this point, we must
806 invoke them so that the type is defined as expected. */
807 # 111 "/usr/lib/gcc/x86_64-pc-linux-gnu/11.1.0/include/stddef.h" 3 4
808 /* In case nobody has defined these types, but we aren't running under
809 GCC 2.00, make sure that __PTRDIFF_TYPE__, __SIZE_TYPE__, and
810 __WCHAR_TYPE__ have reasonable values. This can happen if the
811 parts of GCC is compiled by an older compiler, that actually
812 include gstddef.h, such as collect2. */
813
814 /* Signed type of difference of two pointers. */
815
816 /* Define this type if we are doing the whole job,
817 or if we want this type in particular. */
818 # 159 "/usr/lib/gcc/x86_64-pc-linux-gnu/11.1.0/include/stddef.h" 3 4
819 /* Unsigned type of `sizeof' something. */
820
821 /* Define this type if we are doing the whole job,
822 or if we want this type in particular. */
823 # 209 "/usr/lib/gcc/x86_64-pc-linux-gnu/11.1.0/include/stddef.h" 3 4
824 typedef long unsigned int size_t;
825 # 235 "/usr/lib/gcc/x86_64-pc-linux-gnu/11.1.0/include/stddef.h" 3 4
826 /* Wide character type.
827 Locale-writers should change this as necessary to
828 be big enough to hold unique values not between 0 and 127,
829 and not (wchar_t) -1, for each defined multibyte character. */
830
831 /* Define this type if we are doing the whole job,
832 or if we want this type in particular. */
833 # 387 "/usr/lib/gcc/x86_64-pc-linux-gnu/11.1.0/include/stddef.h" 3 4
834 /* A null pointer constant. */
835 # 34 "/usr/include/stdio.h" 2 3 4
836
837
838 # 1 "/usr/lib/gcc/x86_64-pc-linux-gnu/11.1.0/include/stdarg.h" 1 3 4
839 /* Copyright (C) 1989-2021 Free Software Foundation, Inc.
840
841 This file is part of GCC.
842
843 GCC is free software; you can redistribute it and/or modify
844 it under the terms of the GNU General Public License as published by
845 the Free Software Foundation; either version 3, or (at your option)
846 any later version.
847
848 GCC is distributed in the hope that it will be useful,
849 but WITHOUT ANY WARRANTY; without even the implied warranty of
850 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
851 GNU General Public License for more details.
852
853 Under Section 7 of GPL version 3, you are granted additional
854 permissions described in the GCC Runtime Library Exception, version
855 3.1, as published by the Free Software Foundation.
856
857 You should have received a copy of the GNU General Public License and
858 a copy of the GCC Runtime Library Exception along with this program;
859 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
860 <http://www.gnu.org/licenses/>. */
861
862 /*
863 * ISO C Standard: 7.15 Variable arguments <stdarg.h>
864 */
865 # 36 "/usr/lib/gcc/x86_64-pc-linux-gnu/11.1.0/include/stdarg.h" 3 4
866 /* Define __gnuc_va_list. */
867
868
869
870 typedef __builtin_va_list __gnuc_va_list;
871
872
873 /* Define the standard macros for the user,
874 if this invocation was from the user program. */
875 # 37 "/usr/include/stdio.h" 2 3 4
876
877 # 1 "/usr/include/bits/types.h" 1 3 4
878 /* bits/types.h -- definitions of __*_t types underlying *_t types.
879 Copyright (C) 2002-2021 Free Software Foundation, Inc.
880 This file is part of the GNU C Library.
881
882 The GNU C Library is free software; you can redistribute it and/or
883 modify it under the terms of the GNU Lesser General Public
884 License as published by the Free Software Foundation; either
885 version 2.1 of the License, or (at your option) any later version.
886
887 The GNU C Library is distributed in the hope that it will be useful,
888 but WITHOUT ANY WARRANTY; without even the implied warranty of
889 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
890 Lesser General Public License for more details.
891
892 You should have received a copy of the GNU Lesser General Public
893 License along with the GNU C Library; if not, see
894 <https://www.gnu.org/licenses/>. */
895
896 /*
897 * Never include this file directly; use <sys/types.h> instead.
898 */
899
900
901
902
903 # 1 "/usr/include/features.h" 1 3 4
904 /* Copyright (C) 1991-2021 Free Software Foundation, Inc.
905 This file is part of the GNU C Library.
906
907 The GNU C Library is free software; you can redistribute it and/or
908 modify it under the terms of the GNU Lesser General Public
909 License as published by the Free Software Foundation; either
910 version 2.1 of the License, or (at your option) any later version.
911
912 The GNU C Library is distributed in the hope that it will be useful,
913 but WITHOUT ANY WARRANTY; without even the implied warranty of
914 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
915 Lesser General Public License for more details.
916
917 You should have received a copy of the GNU Lesser General Public
918 License along with the GNU C Library; if not, see
919 <https://www.gnu.org/licenses/>. */
920 # 27 "/usr/include/bits/types.h" 2 3 4
921 # 1 "/usr/include/bits/wordsize.h" 1 3 4
922 /* Determine the wordsize from the preprocessor defines. */
923 # 13 "/usr/include/bits/wordsize.h" 3 4
924 /* Both x86-64 and x32 use the 64-bit system call interface. */
925 # 28 "/usr/include/bits/types.h" 2 3 4
926 # 1 "/usr/include/bits/timesize.h" 1 3 4
927 /* Bit size of the time_t type at glibc build time, x86-64 and x32 case.
928 Copyright (C) 2018-2021 Free Software Foundation, Inc.
929 This file is part of the GNU C Library.
930
931 The GNU C Library is free software; you can redistribute it and/or
932 modify it under the terms of the GNU Lesser General Public
933 License as published by the Free Software Foundation; either
934 version 2.1 of the License, or (at your option) any later version.
935
936 The GNU C Library is distributed in the hope that it will be useful,
937 but WITHOUT ANY WARRANTY; without even the implied warranty of
938 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
939 Lesser General Public License for more details.
940
941 You should have received a copy of the GNU Lesser General Public
942 License along with the GNU C Library; if not, see
943 <https://www.gnu.org/licenses/>. */
944
945
946
947
948
949 /* For others, time size is word size. */
950 # 29 "/usr/include/bits/types.h" 2 3 4
951
952 /* Convenience types. */
953 typedef unsigned char __u_char;
954 typedef unsigned short int __u_short;
955 typedef unsigned int __u_int;
956 typedef unsigned long int __u_long;
957
958 /* Fixed-size types, underlying types depend on word size and compiler. */
959 typedef signed char __int8_t;
960 typedef unsigned char __uint8_t;
961 typedef signed short int __int16_t;
962 typedef unsigned short int __uint16_t;
963 typedef signed int __int32_t;
964 typedef unsigned int __uint32_t;
965
966 typedef signed long int __int64_t;
967 typedef unsigned long int __uint64_t;
968
969
970
971
972
973 /* Smallest types with at least a given width. */
974 typedef __int8_t __int_least8_t;
975 typedef __uint8_t __uint_least8_t;
976 typedef __int16_t __int_least16_t;
977 typedef __uint16_t __uint_least16_t;
978 typedef __int32_t __int_least32_t;
979 typedef __uint32_t __uint_least32_t;
980 typedef __int64_t __int_least64_t;
981 typedef __uint64_t __uint_least64_t;
982
983 /* quad_t is also 64 bits. */
984
985 typedef long int __quad_t;
986 typedef unsigned long int __u_quad_t;
987
988
989
990
991
992 /* Largest integral types. */
993
994 typedef long int __intmax_t;
995 typedef unsigned long int __uintmax_t;
996
997
998
999
1000
1001
1002 /* The machine-dependent file <bits/typesizes.h> defines __*_T_TYPE
1003 macros for each of the OS types we define below. The definitions
1004 of those macros must use the following macros for underlying types.
1005 We define __S<SIZE>_TYPE and __U<SIZE>_TYPE for the signed and unsigned
1006 variants of each of the following integer types on this machine.
1007
1008 16 -- "natural" 16-bit type (always short)
1009 32 -- "natural" 32-bit type (always int)
1010 64 -- "natural" 64-bit type (long or long long)
1011 LONG32 -- 32-bit type, traditionally long
1012 QUAD -- 64-bit type, traditionally long long
1013 WORD -- natural type of __WORDSIZE bits (int or long)
1014 LONGWORD -- type of __WORDSIZE bits, traditionally long
1015
1016 We distinguish WORD/LONGWORD, 32/LONG32, and 64/QUAD so that the
1017 conventional uses of `long' or `long long' type modifiers match the
1018 types we define, even when a less-adorned type would be the same size.
1019 This matters for (somewhat) portably writing printf/scanf formats for
1020 these types, where using the appropriate l or ll format modifiers can
1021 make the typedefs and the formats match up across all GNU platforms. If
1022 we used `long' when it's 64 bits where `long long' is expected, then the
1023 compiler would warn about the formats not matching the argument types,
1024 and the programmer changing them to shut up the compiler would break the
1025 program's portability.
1026
1027 Here we assume what is presently the case in all the GCC configurations
1028 we support: long long is always 64 bits, long is always word/address size,
1029 and int is always 32 bits. */
1030 # 136 "/usr/include/bits/types.h" 3 4
1031 /* No need to mark the typedef with __extension__. */
1032
1033
1034
1035
1036 # 1 "/usr/include/bits/typesizes.h" 1 3 4
1037 /* bits/typesizes.h -- underlying types for *_t. Linux/x86-64 version.
1038 Copyright (C) 2012-2021 Free Software Foundation, Inc.
1039 This file is part of the GNU C Library.
1040
1041 The GNU C Library is free software; you can redistribute it and/or
1042 modify it under the terms of the GNU Lesser General Public
1043 License as published by the Free Software Foundation; either
1044 version 2.1 of the License, or (at your option) any later version.
1045
1046 The GNU C Library is distributed in the hope that it will be useful,
1047 but WITHOUT ANY WARRANTY; without even the implied warranty of
1048 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1049 Lesser General Public License for more details.
1050
1051 You should have received a copy of the GNU Lesser General Public
1052 License along with the GNU C Library; if not, see
1053 <https://www.gnu.org/licenses/>. */
1054 # 26 "/usr/include/bits/typesizes.h" 3 4
1055 /* See <bits/types.h> for the meaning of these macros. This file exists so
1056 that <bits/types.h> need not vary across different GNU platforms. */
1057
1058 /* X32 kernel interface is 64-bit. */
1059 # 78 "/usr/include/bits/typesizes.h" 3 4
1060 /* Tell the libc code that off_t and off64_t are actually the same type
1061 for all ABI purposes, even if possibly expressed as different base types
1062 for C type-checking purposes. */
1063
1064
1065 /* Same for ino_t and ino64_t. */
1066
1067
1068 /* And for __rlim_t and __rlim64_t. */
1069
1070
1071 /* And for fsblkcnt_t, fsblkcnt64_t, fsfilcnt_t and fsfilcnt64_t. */
1072
1073
1074 /* And for getitimer, setitimer and rusage */
1075 # 102 "/usr/include/bits/typesizes.h" 3 4
1076 /* Number of descriptors that can fit in an `fd_set'. */
1077 # 142 "/usr/include/bits/types.h" 2 3 4
1078 # 1 "/usr/include/bits/time64.h" 1 3 4
1079 /* bits/time64.h -- underlying types for __time64_t. Generic version.
1080 Copyright (C) 2018-2021 Free Software Foundation, Inc.
1081 This file is part of the GNU C Library.
1082
1083 The GNU C Library is free software; you can redistribute it and/or
1084 modify it under the terms of the GNU Lesser General Public
1085 License as published by the Free Software Foundation; either
1086 version 2.1 of the License, or (at your option) any later version.
1087
1088 The GNU C Library is distributed in the hope that it will be useful,
1089 but WITHOUT ANY WARRANTY; without even the implied warranty of
1090 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1091 Lesser General Public License for more details.
1092
1093 You should have received a copy of the GNU Lesser General Public
1094 License along with the GNU C Library; if not, see
1095 <https://www.gnu.org/licenses/>. */
1096 # 26 "/usr/include/bits/time64.h" 3 4
1097 /* Define __TIME64_T_TYPE so that it is always a 64-bit type. */
1098
1099
1100 /* If we already have 64-bit time type then use it. */
1101 # 143 "/usr/include/bits/types.h" 2 3 4
1102
1103
1104 typedef unsigned long int __dev_t; /* Type of device numbers. */
1105 typedef unsigned int __uid_t; /* Type of user identifications. */
1106 typedef unsigned int __gid_t; /* Type of group identifications. */
1107 typedef unsigned long int __ino_t; /* Type of file serial numbers. */
1108 typedef unsigned long int __ino64_t; /* Type of file serial numbers (LFS).*/
1109 typedef unsigned int __mode_t; /* Type of file attribute bitmasks. */
1110 typedef unsigned long int __nlink_t; /* Type of file link counts. */
1111 typedef long int __off_t; /* Type of file sizes and offsets. */
1112 typedef long int __off64_t; /* Type of file sizes and offsets (LFS). */
1113 typedef int __pid_t; /* Type of process identifications. */
1114 typedef struct { int __val[2]; } __fsid_t; /* Type of file system IDs. */
1115 typedef long int __clock_t; /* Type of CPU usage counts. */
1116 typedef unsigned long int __rlim_t; /* Type for resource measurement. */
1117 typedef unsigned long int __rlim64_t; /* Type for resource measurement (LFS). */
1118 typedef unsigned int __id_t; /* General type for IDs. */
1119 typedef long int __time_t; /* Seconds since the Epoch. */
1120 typedef unsigned int __useconds_t; /* Count of microseconds. */
1121 typedef long int __suseconds_t; /* Signed count of microseconds. */
1122 typedef long int __suseconds64_t;
1123
1124 typedef int __daddr_t; /* The type of a disk address. */
1125 typedef int __key_t; /* Type of an IPC key. */
1126
1127 /* Clock ID used in clock and timer functions. */
1128 typedef int __clockid_t;
1129
1130 /* Timer ID returned by `timer_create'. */
1131 typedef void * __timer_t;
1132
1133 /* Type to represent block size. */
1134 typedef long int __blksize_t;
1135
1136 /* Types from the Large File Support interface. */
1137
1138 /* Type to count number of disk blocks. */
1139 typedef long int __blkcnt_t;
1140 typedef long int __blkcnt64_t;
1141
1142 /* Type to count file system blocks. */
1143 typedef unsigned long int __fsblkcnt_t;
1144 typedef unsigned long int __fsblkcnt64_t;
1145
1146 /* Type to count file system nodes. */
1147 typedef unsigned long int __fsfilcnt_t;
1148 typedef unsigned long int __fsfilcnt64_t;
1149
1150 /* Type of miscellaneous file system fields. */
1151 typedef long int __fsword_t;
1152
1153 typedef long int __ssize_t; /* Type of a byte count, or error. */
1154
1155 /* Signed long type used in system calls. */
1156 typedef long int __syscall_slong_t;
1157 /* Unsigned long type used in system calls. */
1158 typedef unsigned long int __syscall_ulong_t;
1159
1160 /* These few don't really vary by system, they always correspond
1161 to one of the other defined types. */
1162 typedef __off64_t __loff_t; /* Type of file sizes and offsets (LFS). */
1163 typedef char *__caddr_t;
1164
1165 /* Duplicates info from stdint.h but this is used in unistd.h. */
1166 typedef long int __intptr_t;
1167
1168 /* Duplicate info from sys/socket.h. */
1169 typedef unsigned int __socklen_t;
1170
1171 /* C99: An integer type that can be accessed as an atomic entity,
1172 even in the presence of asynchronous interrupts.
1173 It is not currently necessary for this to be machine-specific. */
1174 typedef int __sig_atomic_t;
1175
1176 /* Seconds since the Epoch, visible to user code when time_t is too
1177 narrow only for consistency with the old way of widening too-narrow
1178 types. User code should never use __time64_t. */
1179 # 39 "/usr/include/stdio.h" 2 3 4
1180 # 1 "/usr/include/bits/types/__fpos_t.h" 1 3 4
1181
1182
1183
1184 # 1 "/usr/include/bits/types.h" 1 3 4
1185 /* bits/types.h -- definitions of __*_t types underlying *_t types.
1186 Copyright (C) 2002-2021 Free Software Foundation, Inc.
1187 This file is part of the GNU C Library.
1188
1189 The GNU C Library is free software; you can redistribute it and/or
1190 modify it under the terms of the GNU Lesser General Public
1191 License as published by the Free Software Foundation; either
1192 version 2.1 of the License, or (at your option) any later version.
1193
1194 The GNU C Library is distributed in the hope that it will be useful,
1195 but WITHOUT ANY WARRANTY; without even the implied warranty of
1196 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1197 Lesser General Public License for more details.
1198
1199 You should have received a copy of the GNU Lesser General Public
1200 License along with the GNU C Library; if not, see
1201 <https://www.gnu.org/licenses/>. */
1202
1203 /*
1204 * Never include this file directly; use <sys/types.h> instead.
1205 */
1206 # 5 "/usr/include/bits/types/__fpos_t.h" 2 3 4
1207 # 1 "/usr/include/bits/types/__mbstate_t.h" 1 3 4
1208
1209
1210
1211 /* Integral type unchanged by default argument promotions that can
1212 hold any value corresponding to members of the extended character
1213 set, as well as at least one value that does not correspond to any
1214 member of the extended character set. */
1215
1216
1217
1218
1219 /* Conversion state information. */
1220 typedef struct
1221 {
1222 int __count;
1223 union
1224 {
1225 unsigned int __wch;
1226 char __wchb[4];
1227 } __value; /* Value so far. */
1228 } __mbstate_t;
1229 # 6 "/usr/include/bits/types/__fpos_t.h" 2 3 4
1230
1231 /* The tag name of this struct is _G_fpos_t to preserve historic
1232 C++ mangled names for functions taking fpos_t arguments.
1233 That name should not be used in new code. */
1234 typedef struct _G_fpos_t
1235 {
1236 __off_t __pos;
1237 __mbstate_t __state;
1238 } __fpos_t;
1239 # 40 "/usr/include/stdio.h" 2 3 4
1240 # 1 "/usr/include/bits/types/__fpos64_t.h" 1 3 4
1241
1242
1243
1244 # 1 "/usr/include/bits/types.h" 1 3 4
1245 /* bits/types.h -- definitions of __*_t types underlying *_t types.
1246 Copyright (C) 2002-2021 Free Software Foundation, Inc.
1247 This file is part of the GNU C Library.
1248
1249 The GNU C Library is free software; you can redistribute it and/or
1250 modify it under the terms of the GNU Lesser General Public
1251 License as published by the Free Software Foundation; either
1252 version 2.1 of the License, or (at your option) any later version.
1253
1254 The GNU C Library is distributed in the hope that it will be useful,
1255 but WITHOUT ANY WARRANTY; without even the implied warranty of
1256 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1257 Lesser General Public License for more details.
1258
1259 You should have received a copy of the GNU Lesser General Public
1260 License along with the GNU C Library; if not, see
1261 <https://www.gnu.org/licenses/>. */
1262
1263 /*
1264 * Never include this file directly; use <sys/types.h> instead.
1265 */
1266 # 5 "/usr/include/bits/types/__fpos64_t.h" 2 3 4
1267
1268
1269 /* The tag name of this struct is _G_fpos64_t to preserve historic
1270 C++ mangled names for functions taking fpos_t and/or fpos64_t
1271 arguments. That name should not be used in new code. */
1272 typedef struct _G_fpos64_t
1273 {
1274 __off64_t __pos;
1275 __mbstate_t __state;
1276 } __fpos64_t;
1277 # 41 "/usr/include/stdio.h" 2 3 4
1278 # 1 "/usr/include/bits/types/__FILE.h" 1 3 4
1279
1280
1281
1282 struct _IO_FILE;
1283 typedef struct _IO_FILE __FILE;
1284 # 42 "/usr/include/stdio.h" 2 3 4
1285 # 1 "/usr/include/bits/types/FILE.h" 1 3 4
1286
1287
1288
1289 struct _IO_FILE;
1290
1291 /* The opaque type of streams. This is the definition used elsewhere. */
1292 typedef struct _IO_FILE FILE;
1293 # 43 "/usr/include/stdio.h" 2 3 4
1294 # 1 "/usr/include/bits/types/struct_FILE.h" 1 3 4
1295 /* Copyright (C) 1991-2021 Free Software Foundation, Inc.
1296 This file is part of the GNU C Library.
1297
1298 The GNU C Library is free software; you can redistribute it and/or
1299 modify it under the terms of the GNU Lesser General Public
1300 License as published by the Free Software Foundation; either
1301 version 2.1 of the License, or (at your option) any later version.
1302
1303 The GNU C Library is distributed in the hope that it will be useful,
1304 but WITHOUT ANY WARRANTY; without even the implied warranty of
1305 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1306 Lesser General Public License for more details.
1307
1308 You should have received a copy of the GNU Lesser General Public
1309 License along with the GNU C Library; if not, see
1310 <https://www.gnu.org/licenses/>. */
1311
1312
1313
1314
1315 /* Caution: The contents of this file are not part of the official
1316 stdio.h API. However, much of it is part of the official *binary*
1317 interface, and therefore cannot be changed. */
1318 # 33 "/usr/include/bits/types/struct_FILE.h" 3 4
1319 # 1 "/usr/include/bits/types.h" 1 3 4
1320 /* bits/types.h -- definitions of __*_t types underlying *_t types.
1321 Copyright (C) 2002-2021 Free Software Foundation, Inc.
1322 This file is part of the GNU C Library.
1323
1324 The GNU C Library is free software; you can redistribute it and/or
1325 modify it under the terms of the GNU Lesser General Public
1326 License as published by the Free Software Foundation; either
1327 version 2.1 of the License, or (at your option) any later version.
1328
1329 The GNU C Library is distributed in the hope that it will be useful,
1330 but WITHOUT ANY WARRANTY; without even the implied warranty of
1331 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1332 Lesser General Public License for more details.
1333
1334 You should have received a copy of the GNU Lesser General Public
1335 License along with the GNU C Library; if not, see
1336 <https://www.gnu.org/licenses/>. */
1337
1338 /*
1339 * Never include this file directly; use <sys/types.h> instead.
1340 */
1341 # 34 "/usr/include/bits/types/struct_FILE.h" 2 3 4
1342
1343 struct _IO_FILE;
1344 struct _IO_marker;
1345 struct _IO_codecvt;
1346 struct _IO_wide_data;
1347
1348 /* During the build of glibc itself, _IO_lock_t will already have been
1349 defined by internal headers. */
1350
1351 typedef void _IO_lock_t;
1352
1353
1354 /* The tag name of this struct is _IO_FILE to preserve historic
1355 C++ mangled names for functions taking FILE* arguments.
1356 That name should not be used in new code. */
1357 struct _IO_FILE
1358 {
1359 int _flags; /* High-order word is _IO_MAGIC; rest is flags. */
1360
1361 /* The following pointers correspond to the C++ streambuf protocol. */
1362 char *_IO_read_ptr; /* Current read pointer */
1363 char *_IO_read_end; /* End of get area. */
1364 char *_IO_read_base; /* Start of putback+get area. */
1365 char *_IO_write_base; /* Start of put area. */
1366 char *_IO_write_ptr; /* Current put pointer. */
1367 char *_IO_write_end; /* End of put area. */
1368 char *_IO_buf_base; /* Start of reserve area. */
1369 char *_IO_buf_end; /* End of reserve area. */
1370
1371 /* The following fields are used to support backing up and undo. */
1372 char *_IO_save_base; /* Pointer to start of non-current get area. */
1373 char *_IO_backup_base; /* Pointer to first valid character of backup area */
1374 char *_IO_save_end; /* Pointer to end of non-current get area. */
1375
1376 struct _IO_marker *_markers;
1377
1378 struct _IO_FILE *_chain;
1379
1380 int _fileno;
1381 int _flags2;
1382 __off_t _old_offset; /* This used to be _offset but it's too small. */
1383
1384 /* 1+column number of pbase(); 0 is unknown. */
1385 unsigned short _cur_column;
1386 signed char _vtable_offset;
1387 char _shortbuf[1];
1388
1389 _IO_lock_t *_lock;
1390
1391
1392
1393
1394
1395
1396
1397 __off64_t _offset;
1398 /* Wide character stream stuff. */
1399 struct _IO_codecvt *_codecvt;
1400 struct _IO_wide_data *_wide_data;
1401 struct _IO_FILE *_freeres_list;
1402 void *_freeres_buf;
1403 size_t __pad5;
1404 int _mode;
1405 /* Make sure we don't get into trouble again. */
1406 char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
1407 };
1408
1409 /* These macros are used by bits/stdio.h and internal headers. */
1410 # 118 "/usr/include/bits/types/struct_FILE.h" 3 4
1411 /* Many more flag bits are defined internally. */
1412 # 44 "/usr/include/stdio.h" 2 3 4
1413 # 52 "/usr/include/stdio.h" 3 4
1414 typedef __gnuc_va_list va_list;
1415 # 63 "/usr/include/stdio.h" 3 4
1416 typedef __off_t off_t;
1417 # 77 "/usr/include/stdio.h" 3 4
1418 typedef __ssize_t ssize_t;
1419
1420
1421
1422
1423 /* The type of the second argument to `fgetpos' and `fsetpos'. */
1424
1425 typedef __fpos_t fpos_t;
1426
1427
1428
1429
1430
1431
1432
1433 /* The possibilities for the third argument to `setvbuf'. */
1434
1435
1436
1437
1438
1439 /* Default buffer size. */
1440
1441
1442
1443 /* The value returned by fgetc and similar functions to indicate the
1444 end of the file. */
1445
1446
1447
1448 /* The possibilities for the third argument to `fseek'.
1449 These values should not be changed. */
1450 # 119 "/usr/include/stdio.h" 3 4
1451 /* Default path prefix for `tempnam' and `tmpnam'. */
1452
1453
1454
1455
1456 /* Get the values:
1457 L_tmpnam How long an array of chars must be to be passed to `tmpnam'.
1458 TMP_MAX The minimum number of unique filenames generated by tmpnam
1459 (and tempnam when it uses tmpnam's name space),
1460 or tempnam (the two are separate).
1461 L_ctermid How long an array to pass to `ctermid'.
1462 L_cuserid How long an array to pass to `cuserid'.
1463 FOPEN_MAX Minimum number of files that can be open at once.
1464 FILENAME_MAX Maximum length of a filename. */
1465 # 1 "/usr/include/bits/stdio_lim.h" 1 3 4
1466 /* Copyright (C) 1994-2021 Free Software Foundation, Inc.
1467 This file is part of the GNU C Library.
1468
1469 The GNU C Library is free software; you can redistribute it and/or
1470 modify it under the terms of the GNU Lesser General Public
1471 License as published by the Free Software Foundation; either
1472 version 2.1 of the License, or (at your option) any later version.
1473
1474 The GNU C Library is distributed in the hope that it will be useful,
1475 but WITHOUT ANY WARRANTY; without even the implied warranty of
1476 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1477 Lesser General Public License for more details.
1478
1479 You should have received a copy of the GNU Lesser General Public
1480 License along with the GNU C Library; if not, see
1481 <https://www.gnu.org/licenses/>. */
1482 # 134 "/usr/include/stdio.h" 2 3 4
1483
1484
1485 /* Standard streams. */
1486 extern FILE *stdin; /* Standard input stream. */
1487 extern FILE *stdout; /* Standard output stream. */
1488 extern FILE *stderr; /* Standard error output stream. */
1489 /* C89/C99 say they're macros. Make them happy. */
1490
1491
1492
1493
1494 /* Remove file FILENAME. */
1495 extern int remove (const char *__filename) __attribute__ ((__nothrow__ , __leaf__));
1496 /* Rename file OLD to NEW. */
1497 extern int rename (const char *__old, const char *__new) __attribute__ ((__nothrow__ , __leaf__));
1498
1499
1500 /* Rename file OLD relative to OLDFD to NEW relative to NEWFD. */
1501 extern int renameat (int __oldfd, const char *__old, int __newfd,
1502 const char *__new) __attribute__ ((__nothrow__ , __leaf__));
1503 # 168 "/usr/include/stdio.h" 3 4
1504 /* Create a temporary file and open it read/write.
1505
1506 This function is a possible cancellation point and therefore not
1507 marked with __THROW. */
1508
1509 extern FILE *tmpfile (void) ;
1510 # 186 "/usr/include/stdio.h" 3 4
1511 /* Generate a temporary filename. */
1512 extern char *tmpnam (char *__s) __attribute__ ((__nothrow__ , __leaf__)) ;
1513
1514
1515 /* This is the reentrant variant of `tmpnam'. The only difference is
1516 that it does not allow S to be NULL. */
1517 extern char *tmpnam_r (char *__s) __attribute__ ((__nothrow__ , __leaf__)) ;
1518
1519
1520
1521
1522 /* Generate a unique temporary filename using up to five characters of PFX
1523 if it is not NULL. The directory to put this file in is searched for
1524 as follows: First the environment variable "TMPDIR" is checked.
1525 If it contains the name of a writable directory, that directory is used.
1526 If not and if DIR is not NULL, that value is checked. If that fails,
1527 P_tmpdir is tried and finally "/tmp". The storage for the filename
1528 is allocated by `malloc'. */
1529 extern char *tempnam (const char *__dir, const char *__pfx)
1530 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) ;
1531
1532
1533
1534 /* Close STREAM.
1535
1536 This function is a possible cancellation point and therefore not
1537 marked with __THROW. */
1538 extern int fclose (FILE *__stream);
1539 /* Flush STREAM, or all streams if STREAM is NULL.
1540
1541 This function is a possible cancellation point and therefore not
1542 marked with __THROW. */
1543 extern int fflush (FILE *__stream);
1544
1545
1546 /* Faster versions when locking is not required.
1547
1548 This function is not part of POSIX and therefore no official
1549 cancellation point. But due to similarity with an POSIX interface
1550 or due to the implementation it is a cancellation point and
1551 therefore not marked with __THROW. */
1552 extern int fflush_unlocked (FILE *__stream);
1553 # 242 "/usr/include/stdio.h" 3 4
1554 /* Open a file and create a new stream for it.
1555
1556 This function is a possible cancellation point and therefore not
1557 marked with __THROW. */
1558 extern FILE *fopen (const char *__restrict __filename,
1559 const char *__restrict __modes) ;
1560 /* Open a file, replacing an existing stream with it.
1561
1562 This function is a possible cancellation point and therefore not
1563 marked with __THROW. */
1564 extern FILE *freopen (const char *__restrict __filename,
1565 const char *__restrict __modes,
1566 FILE *__restrict __stream) ;
1567 # 278 "/usr/include/stdio.h" 3 4
1568 /* Create a new stream that refers to an existing system file descriptor. */
1569 extern FILE *fdopen (int __fd, const char *__modes) __attribute__ ((__nothrow__ , __leaf__)) ;
1570 # 291 "/usr/include/stdio.h" 3 4
1571 /* Create a new stream that refers to a memory buffer. */
1572 extern FILE *fmemopen (void *__s, size_t __len, const char *__modes)
1573 __attribute__ ((__nothrow__ , __leaf__)) ;
1574
1575 /* Open a stream that writes into a malloc'd buffer that is expanded as
1576 necessary. *BUFLOC and *SIZELOC are updated with the buffer's location
1577 and the number of characters written on fflush or fclose. */
1578 extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __attribute__ ((__nothrow__ , __leaf__)) ;
1579
1580
1581
1582 /* If BUF is NULL, make STREAM unbuffered.
1583 Else make it use buffer BUF, of size BUFSIZ. */
1584 extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__));
1585 /* Make STREAM use buffering mode MODE.
1586 If BUF is not NULL, use N bytes of it for buffering;
1587 else allocate an internal buffer N bytes long. */
1588 extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
1589 int __modes, size_t __n) __attribute__ ((__nothrow__ , __leaf__));
1590
1591
1592 /* If BUF is NULL, make STREAM unbuffered.
1593 Else make it use SIZE bytes of BUF for buffering. */
1594 extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
1595 size_t __size) __attribute__ ((__nothrow__ , __leaf__));
1596
1597 /* Make STREAM line-buffered. */
1598 extern void setlinebuf (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
1599
1600
1601
1602 /* Write formatted output to STREAM.
1603
1604 This function is a possible cancellation point and therefore not
1605 marked with __THROW. */
1606 extern int fprintf (FILE *__restrict __stream,
1607 const char *__restrict __format, ...);
1608 /* Write formatted output to stdout.
1609
1610 This function is a possible cancellation point and therefore not
1611 marked with __THROW. */
1612 extern int printf (const char *__restrict __format, ...);
1613 /* Write formatted output to S. */
1614 extern int sprintf (char *__restrict __s,
1615 const char *__restrict __format, ...) __attribute__ ((__nothrow__));
1616
1617 /* Write formatted output to S from argument list ARG.
1618
1619 This function is a possible cancellation point and therefore not
1620 marked with __THROW. */
1621 extern int vfprintf (FILE *__restrict __s, const char *__restrict __format,
1622 __gnuc_va_list __arg);
1623 /* Write formatted output to stdout from argument list ARG.
1624
1625 This function is a possible cancellation point and therefore not
1626 marked with __THROW. */
1627 extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg);
1628 /* Write formatted output to S from argument list ARG. */
1629 extern int vsprintf (char *__restrict __s, const char *__restrict __format,
1630 __gnuc_va_list __arg) __attribute__ ((__nothrow__));
1631
1632
1633 /* Maximum chars of output to write in MAXLEN. */
1634 extern int snprintf (char *__restrict __s, size_t __maxlen,
1635 const char *__restrict __format, ...)
1636 __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 4)));
1637
1638 extern int vsnprintf (char *__restrict __s, size_t __maxlen,
1639 const char *__restrict __format, __gnuc_va_list __arg)
1640 __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 0)));
1641 # 378 "/usr/include/stdio.h" 3 4
1642 /* Write formatted output to a file descriptor. */
1643 extern int vdprintf (int __fd, const char *__restrict __fmt,
1644 __gnuc_va_list __arg)
1645 __attribute__ ((__format__ (__printf__, 2, 0)));
1646 extern int dprintf (int __fd, const char *__restrict __fmt, ...)
1647 __attribute__ ((__format__ (__printf__, 2, 3)));
1648
1649
1650
1651 /* Read formatted input from STREAM.
1652
1653 This function is a possible cancellation point and therefore not
1654 marked with __THROW. */
1655 extern int fscanf (FILE *__restrict __stream,
1656 const char *__restrict __format, ...) ;
1657 /* Read formatted input from stdin.
1658
1659 This function is a possible cancellation point and therefore not
1660 marked with __THROW. */
1661 extern int scanf (const char *__restrict __format, ...) ;
1662 /* Read formatted input from S. */
1663 extern int sscanf (const char *__restrict __s,
1664 const char *__restrict __format, ...) __attribute__ ((__nothrow__ , __leaf__));
1665
1666 /* For historical reasons, the C99-compliant versions of the scanf
1667 functions are at alternative names. When __LDBL_COMPAT or
1668 __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI are in effect, this is handled in
1669 bits/stdio-ldbl.h. */
1670 # 1 "/usr/include/bits/floatn.h" 1 3 4
1671 /* Macros to control TS 18661-3 glibc features on x86.
1672 Copyright (C) 2017-2021 Free Software Foundation, Inc.
1673 This file is part of the GNU C Library.
1674
1675 The GNU C Library is free software; you can redistribute it and/or
1676 modify it under the terms of the GNU Lesser General Public
1677 License as published by the Free Software Foundation; either
1678 version 2.1 of the License, or (at your option) any later version.
1679
1680 The GNU C Library is distributed in the hope that it will be useful,
1681 but WITHOUT ANY WARRANTY; without even the implied warranty of
1682 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1683 Lesser General Public License for more details.
1684
1685 You should have received a copy of the GNU Lesser General Public
1686 License along with the GNU C Library; if not, see
1687 <https://www.gnu.org/licenses/>. */
1688
1689
1690
1691
1692 # 1 "/usr/include/features.h" 1 3 4
1693 /* Copyright (C) 1991-2021 Free Software Foundation, Inc.
1694 This file is part of the GNU C Library.
1695
1696 The GNU C Library is free software; you can redistribute it and/or
1697 modify it under the terms of the GNU Lesser General Public
1698 License as published by the Free Software Foundation; either
1699 version 2.1 of the License, or (at your option) any later version.
1700
1701 The GNU C Library is distributed in the hope that it will be useful,
1702 but WITHOUT ANY WARRANTY; without even the implied warranty of
1703 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1704 Lesser General Public License for more details.
1705
1706 You should have received a copy of the GNU Lesser General Public
1707 License along with the GNU C Library; if not, see
1708 <https://www.gnu.org/licenses/>. */
1709 # 23 "/usr/include/bits/floatn.h" 2 3 4
1710
1711 /* Defined to 1 if the current compiler invocation provides a
1712 floating-point type with the IEEE 754 binary128 format, and this
1713 glibc includes corresponding *f128 interfaces for it. The required
1714 libgcc support was added some time after the basic compiler
1715 support, for x86_64 and x86. */
1716 # 37 "/usr/include/bits/floatn.h" 3 4
1717 /* Defined to 1 if __HAVE_FLOAT128 is 1 and the type is ABI-distinct
1718 from the default float, double and long double types in this glibc. */
1719
1720
1721
1722
1723
1724
1725 /* Defined to 1 if the current compiler invocation provides a
1726 floating-point type with the right format for _Float64x, and this
1727 glibc includes corresponding *f64x interfaces for it. */
1728
1729
1730 /* Defined to 1 if __HAVE_FLOAT64X is 1 and _Float64x has the format
1731 of long double. Otherwise, if __HAVE_FLOAT64X is 1, _Float64x has
1732 the format of _Float128, which must be different from that of long
1733 double. */
1734
1735
1736
1737
1738 /* Defined to concatenate the literal suffix to be used with _Float128
1739 types, if __HAVE_FLOAT128 is 1. */
1740 # 69 "/usr/include/bits/floatn.h" 3 4
1741 /* Defined to a complex binary128 type if __HAVE_FLOAT128 is 1. */
1742 # 81 "/usr/include/bits/floatn.h" 3 4
1743 /* The remaining of this file provides support for older compilers. */
1744
1745
1746 /* The type _Float128 exists only since GCC 7.0. */
1747
1748
1749
1750
1751 /* __builtin_huge_valf128 doesn't exist before GCC 7.0. */
1752
1753
1754
1755
1756 /* Older GCC has only a subset of built-in functions for _Float128 on
1757 x86, and __builtin_infq is not usable in static initializers.
1758 Converting a narrower sNaN to _Float128 produces a quiet NaN, so
1759 attempts to use _Float128 sNaNs will not work properly with older
1760 compilers. */
1761 # 107 "/usr/include/bits/floatn.h" 3 4
1762 /* In math/math.h, __MATH_TG will expand signbit to __builtin_signbit*,
1763 e.g.: __builtin_signbitf128, before GCC 6. However, there has never
1764 been a __builtin_signbitf128 in GCC and the type-generic builtin is
1765 only available since GCC 6. */
1766 # 119 "/usr/include/bits/floatn.h" 3 4
1767 # 1 "/usr/include/bits/floatn-common.h" 1 3 4
1768 /* Macros to control TS 18661-3 glibc features where the same
1769 definitions are appropriate for all platforms.
1770 Copyright (C) 2017-2021 Free Software Foundation, Inc.
1771 This file is part of the GNU C Library.
1772
1773 The GNU C Library is free software; you can redistribute it and/or
1774 modify it under the terms of the GNU Lesser General Public
1775 License as published by the Free Software Foundation; either
1776 version 2.1 of the License, or (at your option) any later version.
1777
1778 The GNU C Library is distributed in the hope that it will be useful,
1779 but WITHOUT ANY WARRANTY; without even the implied warranty of
1780 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1781 Lesser General Public License for more details.
1782
1783 You should have received a copy of the GNU Lesser General Public
1784 License along with the GNU C Library; if not, see
1785 <https://www.gnu.org/licenses/>. */
1786
1787
1788
1789
1790 # 1 "/usr/include/features.h" 1 3 4
1791 /* Copyright (C) 1991-2021 Free Software Foundation, Inc.
1792 This file is part of the GNU C Library.
1793
1794 The GNU C Library is free software; you can redistribute it and/or
1795 modify it under the terms of the GNU Lesser General Public
1796 License as published by the Free Software Foundation; either
1797 version 2.1 of the License, or (at your option) any later version.
1798
1799 The GNU C Library is distributed in the hope that it will be useful,
1800 but WITHOUT ANY WARRANTY; without even the implied warranty of
1801 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1802 Lesser General Public License for more details.
1803
1804 You should have received a copy of the GNU Lesser General Public
1805 License along with the GNU C Library; if not, see
1806 <https://www.gnu.org/licenses/>. */
1807 # 24 "/usr/include/bits/floatn-common.h" 2 3 4
1808 # 1 "/usr/include/bits/long-double.h" 1 3 4
1809 /* Properties of long double type. ldbl-96 version.
1810 Copyright (C) 2016-2021 Free Software Foundation, Inc.
1811 This file is part of the GNU C Library.
1812
1813 The GNU C Library is free software; you can redistribute it and/or
1814 modify it under the terms of the GNU Lesser General Public
1815 License published by the Free Software Foundation; either
1816 version 2.1 of the License, or (at your option) any later version.
1817
1818 The GNU C Library is distributed in the hope that it will be useful,
1819 but WITHOUT ANY WARRANTY; without even the implied warranty of
1820 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1821 Lesser General Public License for more details.
1822
1823 You should have received a copy of the GNU Lesser General Public
1824 License along with the GNU C Library; if not, see
1825 <https://www.gnu.org/licenses/>. */
1826
1827 /* long double is distinct from double, so there is nothing to
1828 define here. */
1829 # 25 "/usr/include/bits/floatn-common.h" 2 3 4
1830
1831 /* This header should be included at the bottom of each bits/floatn.h.
1832 It defines the following macros for each _FloatN and _FloatNx type,
1833 where the same definitions, or definitions based only on the macros
1834 in bits/floatn.h, are appropriate for all glibc configurations. */
1835
1836 /* Defined to 1 if the current compiler invocation provides a
1837 floating-point type with the right format for this type, and this
1838 glibc includes corresponding *fN or *fNx interfaces for it. */
1839
1840
1841
1842
1843
1844
1845 /* Defined to 1 if the corresponding __HAVE_<type> macro is 1 and the
1846 type is the first with its format in the sequence of (the default
1847 choices for) float, double, long double, _Float16, _Float32,
1848 _Float64, _Float128, _Float32x, _Float64x, _Float128x for this
1849 glibc; that is, if functions present once per floating-point format
1850 rather than once per type are present for this type.
1851
1852 All configurations supported by glibc have _Float32 the same format
1853 as float, _Float64 and _Float32x the same format as double, the
1854 _Float64x the same format as either long double or _Float128. No
1855 configurations support _Float128x or, as of GCC 7, have compiler
1856 support for a type meeting the requirements for _Float128x. */
1857
1858
1859
1860
1861
1862
1863
1864 /* Defined to 1 if the corresponding _FloatN type is not binary compatible
1865 with the corresponding ISO C type in the current compilation unit as
1866 opposed to __HAVE_DISTINCT_FLOATN, which indicates the default types built
1867 in glibc. */
1868
1869
1870
1871 /* Defined to 1 if any _FloatN or _FloatNx types that are not
1872 ABI-distinct are however distinct types at the C language level (so
1873 for the purposes of __builtin_types_compatible_p and _Generic). */
1874 # 77 "/usr/include/bits/floatn-common.h" 3 4
1875 /* Defined to concatenate the literal suffix to be used with _FloatN
1876 or _FloatNx types, if __HAVE_<type> is 1. The corresponding
1877 literal suffixes exist since GCC 7, for C only. */
1878 # 137 "/usr/include/bits/floatn-common.h" 3 4
1879 /* Defined to a complex type if __HAVE_<type> is 1. */
1880 # 195 "/usr/include/bits/floatn-common.h" 3 4
1881 /* The remaining of this file provides support for older compilers. */
1882 # 228 "/usr/include/bits/floatn-common.h" 3 4
1883 /* If double, long double and _Float64 all have the same set of
1884 values, TS 18661-3 requires the usual arithmetic conversions on
1885 long double and _Float64 to produce _Float64. For this to be the
1886 case when building with a compiler without a distinct _Float64
1887 type, _Float64 must be a typedef for long double, not for
1888 double. */
1889 # 120 "/usr/include/bits/floatn.h" 2 3 4
1890 # 407 "/usr/include/stdio.h" 2 3 4
1891
1892
1893
1894 extern int fscanf (FILE *__restrict __stream, const char *__restrict __format, ...) __asm__ ("" "__isoc99_fscanf")
1895
1896 ;
1897 extern int scanf (const char *__restrict __format, ...) __asm__ ("" "__isoc99_scanf")
1898 ;
1899 extern int sscanf (const char *__restrict __s, const char *__restrict __format, ...) __asm__ ("" "__isoc99_sscanf") __attribute__ ((__nothrow__ , __leaf__))
1900
1901 ;
1902 # 431 "/usr/include/stdio.h" 3 4
1903 /* Read formatted input from S into argument list ARG.
1904
1905 This function is a possible cancellation point and therefore not
1906 marked with __THROW. */
1907 extern int vfscanf (FILE *__restrict __s, const char *__restrict __format,
1908 __gnuc_va_list __arg)
1909 __attribute__ ((__format__ (__scanf__, 2, 0))) ;
1910
1911 /* Read formatted input from stdin into argument list ARG.
1912
1913 This function is a possible cancellation point and therefore not
1914 marked with __THROW. */
1915 extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg)
1916 __attribute__ ((__format__ (__scanf__, 1, 0))) ;
1917
1918 /* Read formatted input from S into argument list ARG. */
1919 extern int vsscanf (const char *__restrict __s,
1920 const char *__restrict __format, __gnuc_va_list __arg)
1921 __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__format__ (__scanf__, 2, 0)));
1922
1923 /* Same redirection as above for the v*scanf family. */
1924
1925
1926
1927 extern int vfscanf (FILE *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vfscanf")
1928
1929
1930
1931 __attribute__ ((__format__ (__scanf__, 2, 0))) ;
1932 extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vscanf")
1933
1934 __attribute__ ((__format__ (__scanf__, 1, 0))) ;
1935 extern int vsscanf (const char *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vsscanf") __attribute__ ((__nothrow__ , __leaf__))
1936
1937
1938
1939 __attribute__ ((__format__ (__scanf__, 2, 0)));
1940 # 485 "/usr/include/stdio.h" 3 4
1941 /* Read a character from STREAM.
1942
1943 These functions are possible cancellation points and therefore not
1944 marked with __THROW. */
1945 extern int fgetc (FILE *__stream);
1946 extern int getc (FILE *__stream);
1947
1948 /* Read a character from stdin.
1949
1950 This function is a possible cancellation point and therefore not
1951 marked with __THROW. */
1952 extern int getchar (void);
1953
1954
1955 /* These are defined in POSIX.1:1996.
1956
1957 These functions are possible cancellation points and therefore not
1958 marked with __THROW. */
1959 extern int getc_unlocked (FILE *__stream);
1960 extern int getchar_unlocked (void);
1961
1962
1963
1964 /* Faster version when locking is not necessary.
1965
1966 This function is not part of POSIX and therefore no official
1967 cancellation point. But due to similarity with an POSIX interface
1968 or due to the implementation it is a cancellation point and
1969 therefore not marked with __THROW. */
1970 extern int fgetc_unlocked (FILE *__stream);
1971
1972
1973
1974 /* Write a character to STREAM.
1975
1976 These functions are possible cancellation points and therefore not
1977 marked with __THROW.
1978
1979 These functions is a possible cancellation point and therefore not
1980 marked with __THROW. */
1981 extern int fputc (int __c, FILE *__stream);
1982 extern int putc (int __c, FILE *__stream);
1983
1984 /* Write a character to stdout.
1985
1986 This function is a possible cancellation point and therefore not
1987 marked with __THROW. */
1988 extern int putchar (int __c);
1989
1990
1991 /* Faster version when locking is not necessary.
1992
1993 This function is not part of POSIX and therefore no official
1994 cancellation point. But due to similarity with an POSIX interface
1995 or due to the implementation it is a cancellation point and
1996 therefore not marked with __THROW. */
1997 extern int fputc_unlocked (int __c, FILE *__stream);
1998
1999
2000
2001 /* These are defined in POSIX.1:1996.
2002
2003 These functions are possible cancellation points and therefore not
2004 marked with __THROW. */
2005 extern int putc_unlocked (int __c, FILE *__stream);
2006 extern int putchar_unlocked (int __c);
2007
2008
2009
2010
2011
2012 /* Get a word (int) from STREAM. */
2013 extern int getw (FILE *__stream);
2014
2015 /* Write a word (int) to STREAM. */
2016 extern int putw (int __w, FILE *__stream);
2017
2018
2019
2020 /* Get a newline-terminated string of finite length from STREAM.
2021
2022 This function is a possible cancellation point and therefore not
2023 marked with __THROW. */
2024 extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
2025 __attribute__ ((__access__ (__write_only__, 1, 2)));
2026 # 598 "/usr/include/stdio.h" 3 4
2027 /* Read up to (and including) a DELIMITER from STREAM into *LINEPTR
2028 (and null-terminate it). *LINEPTR is a pointer returned from malloc (or
2029 NULL), pointing to *N characters of space. It is realloc'd as
2030 necessary. Returns the number of characters read (not including the
2031 null terminator), or -1 on error or EOF.
2032
2033 These functions are not part of POSIX and therefore no official
2034 cancellation point. But due to similarity with an POSIX interface
2035 or due to the implementation they are cancellation points and
2036 therefore not marked with __THROW. */
2037 extern __ssize_t __getdelim (char **__restrict __lineptr,
2038 size_t *__restrict __n, int __delimiter,
2039 FILE *__restrict __stream) ;
2040 extern __ssize_t getdelim (char **__restrict __lineptr,
2041 size_t *__restrict __n, int __delimiter,
2042 FILE *__restrict __stream) ;
2043
2044 /* Like `getdelim', but reads up to a newline.
2045
2046 This function is not part of POSIX and therefore no official
2047 cancellation point. But due to similarity with an POSIX interface
2048 or due to the implementation it is a cancellation point and
2049 therefore not marked with __THROW. */
2050 extern __ssize_t getline (char **__restrict __lineptr,
2051 size_t *__restrict __n,
2052 FILE *__restrict __stream) ;
2053
2054
2055
2056 /* Write a string to STREAM.
2057
2058 This function is a possible cancellation point and therefore not
2059 marked with __THROW. */
2060 extern int fputs (const char *__restrict __s, FILE *__restrict __stream);
2061
2062 /* Write a string, followed by a newline, to stdout.
2063
2064 This function is a possible cancellation point and therefore not
2065 marked with __THROW. */
2066 extern int puts (const char *__s);
2067
2068
2069 /* Push a character back onto the input buffer of STREAM.
2070
2071 This function is a possible cancellation point and therefore not
2072 marked with __THROW. */
2073 extern int ungetc (int __c, FILE *__stream);
2074
2075
2076 /* Read chunks of generic data from STREAM.
2077
2078 This function is a possible cancellation point and therefore not
2079 marked with __THROW. */
2080 extern size_t fread (void *__restrict __ptr, size_t __size,
2081 size_t __n, FILE *__restrict __stream) ;
2082 /* Write chunks of generic data to STREAM.
2083
2084 This function is a possible cancellation point and therefore not
2085 marked with __THROW. */
2086 extern size_t fwrite (const void *__restrict __ptr, size_t __size,
2087 size_t __n, FILE *__restrict __s);
2088 # 672 "/usr/include/stdio.h" 3 4
2089 /* Faster versions when locking is not necessary.
2090
2091 These functions are not part of POSIX and therefore no official
2092 cancellation point. But due to similarity with an POSIX interface
2093 or due to the implementation they are cancellation points and
2094 therefore not marked with __THROW. */
2095 extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
2096 size_t __n, FILE *__restrict __stream) ;
2097 extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size,
2098 size_t __n, FILE *__restrict __stream);
2099
2100
2101
2102 /* Seek to a certain position on STREAM.
2103
2104 This function is a possible cancellation point and therefore not
2105 marked with __THROW. */
2106 extern int fseek (FILE *__stream, long int __off, int __whence);
2107 /* Return the current position of STREAM.
2108
2109 This function is a possible cancellation point and therefore not
2110 marked with __THROW. */
2111 extern long int ftell (FILE *__stream) ;
2112 /* Rewind to the beginning of STREAM.
2113
2114 This function is a possible cancellation point and therefore not
2115 marked with __THROW. */
2116 extern void rewind (FILE *__stream);
2117
2118 /* The Single Unix Specification, Version 2, specifies an alternative,
2119 more adequate interface for the two functions above which deal with
2120 file offset. `long int' is not the right type. These definitions
2121 are originally defined in the Large File Support API. */
2122
2123
2124
2125 /* Seek to a certain position on STREAM.
2126
2127 This function is a possible cancellation point and therefore not
2128 marked with __THROW. */
2129 extern int fseeko (FILE *__stream, __off_t __off, int __whence);
2130 /* Return the current position of STREAM.
2131
2132 This function is a possible cancellation point and therefore not
2133 marked with __THROW. */
2134 extern __off_t ftello (FILE *__stream) ;
2135 # 732 "/usr/include/stdio.h" 3 4
2136 /* Get STREAM's position.
2137
2138 This function is a possible cancellation point and therefore not
2139 marked with __THROW. */
2140 extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);
2141 /* Set STREAM's position.
2142
2143 This function is a possible cancellation point and therefore not
2144 marked with __THROW. */
2145 extern int fsetpos (FILE *__stream, const fpos_t *__pos);
2146 # 761 "/usr/include/stdio.h" 3 4
2147 /* Clear the error and EOF indicators for STREAM. */
2148 extern void clearerr (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
2149 /* Return the EOF indicator for STREAM. */
2150 extern int feof (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;
2151 /* Return the error indicator for STREAM. */
2152 extern int ferror (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;
2153
2154
2155 /* Faster versions when locking is not required. */
2156 extern void clearerr_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
2157 extern int feof_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;
2158 extern int ferror_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;
2159
2160
2161
2162 /* Print a message describing the meaning of the value of errno.
2163
2164 This function is a possible cancellation point and therefore not
2165 marked with __THROW. */
2166 extern void perror (const char *__s);
2167
2168
2169
2170 /* Return the system file descriptor for STREAM. */
2171 extern int fileno (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;
2172
2173
2174
2175 /* Faster version when locking is not required. */
2176 extern int fileno_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;
2177
2178
2179
2180
2181 /* Create a new stream connected to a pipe running the given command.
2182
2183 This function is a possible cancellation point and therefore not
2184 marked with __THROW. */
2185 extern FILE *popen (const char *__command, const char *__modes) ;
2186
2187 /* Close a stream opened by popen and return the status of its child.
2188
2189 This function is a possible cancellation point and therefore not
2190 marked with __THROW. */
2191 extern int pclose (FILE *__stream);
2192
2193
2194
2195
2196 /* Return the name of the controlling terminal. */
2197 extern char *ctermid (char *__s) __attribute__ ((__nothrow__ , __leaf__));
2198 # 836 "/usr/include/stdio.h" 3 4
2199 /* These are defined in POSIX.1:1996. */
2200
2201 /* Acquire ownership of STREAM. */
2202 extern void flockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
2203
2204 /* Try to acquire ownership of STREAM but do not block if it is not
2205 possible. */
2206 extern int ftrylockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;
2207
2208 /* Relinquish the ownership granted for STREAM. */
2209 extern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
2210 # 855 "/usr/include/stdio.h" 3 4
2211 /* Slow-path routines used by the optimized inline functions in
2212 bits/stdio.h. */
2213 extern int __uflow (FILE *);
2214 extern int __overflow (FILE *, int);
2215
2216 /* If we are compiling with optimizing read this file. It contains
2217 several optimizing inline functions and macros. */
2218
2219
2220
2221
2222
2223
2224
2225 # 1 "/usr/include/bits/floatn.h" 1 3 4
2226 /* Macros to control TS 18661-3 glibc features on x86.
2227 Copyright (C) 2017-2021 Free Software Foundation, Inc.
2228 This file is part of the GNU C Library.
2229
2230 The GNU C Library is free software; you can redistribute it and/or
2231 modify it under the terms of the GNU Lesser General Public
2232 License as published by the Free Software Foundation; either
2233 version 2.1 of the License, or (at your option) any later version.
2234
2235 The GNU C Library is distributed in the hope that it will be useful,
2236 but WITHOUT ANY WARRANTY; without even the implied warranty of
2237 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
2238 Lesser General Public License for more details.
2239
2240 You should have received a copy of the GNU Lesser General Public
2241 License along with the GNU C Library; if not, see
2242 <https://www.gnu.org/licenses/>. */
2243 # 870 "/usr/include/stdio.h" 2 3 4
2244
2245
2246
2247
2248
2249 # 2 "hello.c" 2
2250
2251
2252 # 3 "hello.c"
2253 int main(int argc, char **argv)
2254 {
2255 //program c no out function, lib printf function
2256 printf("Hello world!\n");
2257
2258 return 0;
2259 }
2)、编译成汇编代码
gcc -S fileName.c //生成.s文件,默认生成gcc汇编格式代码
1 .file "hello.c"
2 .text
3 .section .rodata
4 .LC0:
5 .string "Hello world!"
6 .text
7 .globl main
8 .type main, @function
9 main:
10 .LFB0:
11 .cfi_startproc
12 pushq %rbp
13 .cfi_def_cfa_offset 16
14 .cfi_offset 6, -16
15 movq %rsp, %rbp
16 .cfi_def_cfa_register 6
17 subq $16, %rsp
18 movl %edi, -4(%rbp)
19 movq %rsi, -16(%rbp)
20 leaq .LC0(%rip), %rax
21 movq %rax, %rdi
22 call puts@PLT
23 movl $0, %eax
24 leave
25 .cfi_def_cfa 7, 8
26 ret
27 .cfi_endproc
28 .LFE0:
29 .size main, .-main
30 .ident "GCC: (GNU) 11.1.0"
31 .section .note.GNU-stack,"",@progbits
还可以使用gcc -S -masm=intel fileName.c -o fileName.s
1 .file "hello.c"
2 .intel_syntax noprefix
3 .text
4 .section .rodata
5 .LC0:
6 .string "Hello world!"
7 .text
8 .globl main
9 .type main, @function
10 main:
11 .LFB0:
12 .cfi_startproc
13 push rbp
14 .cfi_def_cfa_offset 16
15 .cfi_offset 6, -16
16 mov rbp, rsp
17 .cfi_def_cfa_register 6
18 sub rsp, 16
19 mov DWORD PTR -4[rbp], edi
20 mov QWORD PTR -16[rbp], rsi
21 lea rax, .LC0[rip]
22 mov rdi, rax
23 call puts@PLT
24 mov eax, 0
25 leave
26 .cfi_def_cfa 7, 8
27 ret
28 .cfi_endproc
29 .LFE0:
30 .size main, .-main
31 .ident "GCC: (GNU) 11.1.0"
32 .section .note.GNU-stack,"",@progbits
3)、汇编成目标代码
gcc -g -c fileName.c //生成.o文件,加上-g选项,可将汇编代码与C代码混合存储
4)、链接,组合成一个执行文件
gcc fileName.c -l库名 -o fileName //若库的路径不是默认路径,须
gcc fileName.c -L 库路径名 -o fileName
5)、输出所有步骤的中间文件 -save-temps
gcc fileName.c -save-temps -o fileName
6)、仅仅测试,不执行任何步骤 -fsyntax-only
gcc fileName.c -fsyntax-only
7)、同时编译多个文件
gcc -c fileName1.c fileName2.c ... fileNameN.c
链接:
gcc fileName1.o fileName2.o ... fileNameN.o -o fileName
文件类型与后缀名:
.c c源码
.i 预处理后的输出结果
.h C的头文件
.s 汇编代码
.S 有C命令的汇编代码
包含目录:
1.-I 目录 [目录]
2.-iquote 目录 [目录]
3.-I -在I左侧,只对尖括号的头文件搜索
- I- -在I右侧,对尖括号和双引号的头文件搜索
原文链接: https://www.cnblogs.com/guochaoxxl/p/15865413.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/187752
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!