当我研究 C 编程语言的编译过程步骤时,我尝试根据输入/输出来分解每个步骤(预处理、编译、汇编和链接),以便掌握幕后发生的事情。
不幸的是,由于我对处理编译器选项知之甚少,我未能做到这一点gcc(请让我们坚持下去,gcc因为它是我的 Linux 机器上可用的编译器)。我什至管理了预处理步骤的输出,但其他步骤却失败了。
我真的很感谢在这个意义上的任何帮助。
我不想对每个步骤进行全面的解释。它已经可以在互联网上使用。我想查看他们的输入/输出以及gcc我需要通过哪个选项才能完成此任务。
小智 11
让我们采用简单的“hello world!” C 程序命名为main.c
#include <stdio.h>\nint main() {\n printf("Hello, World!");\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n*.cfile。\\):反斜杠\\用于行拼接,允许您将长行代码分成多行以提高可读性,然后将它们连接起来形成单行。#include <stdio.h>程序中存在该指令,则预处理器会解释该指令并用文件的内容替换该指令/usr/include/stdio.h。#define指令定义宏。它们可以是常量宏,例如 ,#define BUFFER_SIZE 1024或类似函数的宏,例如#define MAX(a, b) ((a) > (b) ? (a) : (b))。#ifdef DEBUG printf("Debugging is enabled.\\n"); #endif。其他条件编译有#ifndef, #if, #elif, #else。预处理器评估这些条件并确定所附代码是否应包含在预处理的输出文件中。C预处理器通知C编译器每个标记在源代码中的来源位置。C 中的标记可以定义为对编译器有意义的 C 编程语言的最小单个元素。它是C程序的基本组成部分。它们可以是关键字 ( double, if, while, return, ...); 标识符(变量和函数名称);常量 ( const int c_var = 20;); 弦乐;特殊符号 ( [], (), {}, ,,#、 ...);运算符(一元、二元和三元运算符);*.i预处理文件。该预处理文件是所谓的翻译单元(或更随意地是编译单元),并且是生成目标文件的编译器C的最终输入。C++我们的静态函数仅在此文件中可见。 gcc -E main.c -o main.i\nRun Code Online (Sandbox Code Playgroud)\n-E预处理阶段后停止选项;不要正确运行编译器。输出采用预处理源代码的形式,发送到标准输出(或带有选项的文件-o)。或者,也可以直接使用cpp( Cpreprocessor) 来获取预处理后的文件:
cpp main.c -o main2.i\nRun Code Online (Sandbox Code Playgroud)\n请注意,两个文件完全相同
\n \xe2\x9d\xaf cmp main.i main2.i && echo "Files are equal" || echo "Files are not equal"\n Files are equal\nRun Code Online (Sandbox Code Playgroud)\n输出是
\n# 0 "main.c"\n# 0 "<built-in>"\n# 0 "<command-line>"\n# 1 "/usr/include/stdc-predef.h" 1 3 4\n# 0 "<command-line>" 2\n# 1 "main.c"\n# 1 "/usr/include/stdio.h" 1 3 4\n# 27 "/usr/include/stdio.h" 3 4\n# 1 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 1 3 4\n# 33 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 3 4\n# 1 "/usr/include/features.h" 1 3 4\n# 392 "/usr/include/features.h" 3 4\n# 1 "/usr/include/features-time64.h" 1 3 4\n# 20 "/usr/include/features-time64.h" 3 4\n# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4\n# 21 "/usr/include/features-time64.h" 2 3 4\n# 1 "/usr/include/x86_64-linux-gnu/bits/timesize.h" 1 3 4\n# 19 "/usr/include/x86_64-linux-gnu/bits/timesize.h" 3 4\n# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4\n# 20 "/usr/include/x86_64-linux-gnu/bits/timesize.h" 2 3 4\n# 22 "/usr/include/features-time64.h" 2 3 4\n# 393 "/usr/include/features.h" 2 3 4\n# 486 "/usr/include/features.h" 3 4\n# 1 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 1 3 4\n# 559 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 3 4\n# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4\n# 560 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 2 3 4\n# 1 "/usr/include/x86_64-linux-gnu/bits/long-double.h" 1 3 4\n# 561 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 2 3 4\n# 487 "/usr/include/features.h" 2 3 4\n# 510 "/usr/include/features.h" 3 4\n# 1 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 1 3 4\n# 10 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 3 4\n# 1 "/usr/include/x86_64-linux-gnu/gnu/stubs-64.h" 1 3 4\n# 11 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 2 3 4\n# 511 "/usr/include/features.h" 2 3 4\n# 34 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 2 3 4\n# 28 "/usr/include/stdio.h" 2 3 4\n\n\n\n\n\n# 1 "/usr/lib/gcc/x86_64-linux-gnu/11/include/stddef.h" 1 3 4\n# 209 "/usr/lib/gcc/x86_64-linux-gnu/11/include/stddef.h" 3 4\n\n# 209 "/usr/lib/gcc/x86_64-linux-gnu/11/include/stddef.h" 3 4\ntypedef long unsigned int size_t;\n# 34 "/usr/include/stdio.h" 2 3 4\n\n\n# 1 "/usr/lib/gcc/x86_64-linux-gnu/11/include/stdarg.h" 1 3 4\n# 40 "/usr/lib/gcc/x86_64-linux-gnu/11/include/stdarg.h" 3 4\ntypedef __builtin_va_list __gnuc_va_list;\n# 37 "/usr/include/stdio.h" 2 3 4\n\n# 1 "/usr/include/x86_64-linux-gnu/bits/types.h" 1 3 4\n# 27 "/usr/include/x86_64-linux-gnu/bits/types.h" 3 4\n# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4\n# 28 "/usr/include/x86_64-linux-gnu/bits/types.h" 2 3 4\n# 1 "/usr/include/x86_64-linux-gnu/bits/timesize.h" 1 3 4\n# 19 "/usr/include/x86_64-linux-gnu/bits/timesize.h" 3 4\n# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4\n# 20 "/usr/include/x86_64-linux-gnu/bits/timesize.h" 2 3 4\n# 29 "/usr/include/x86_64-linux-gnu/bits/types.h" 2 3 4\n\n\ntypedef unsigned char __u_char;\ntypedef unsigned short int __u_short;\ntypedef unsigned int __u_int;\ntypedef unsigned long int __u_long;\n\n\ntypedef signed char __int8_t;\ntypedef unsigned char __uint8_t;\ntypedef signed short int __int16_t;\ntypedef unsigned short int __uint16_t;\ntypedef signed int __int32_t;\ntypedef unsigned int __uint32_t;\n\ntypedef signed long int __int64_t;\ntypedef unsigned long int __uint64_t;\n\n\n\n\n\n\ntypedef __int8_t __int_least8_t;\ntypedef __uint8_t __uint_least8_t;\ntypedef __int16_t __int_least16_t;\ntypedef __uint16_t __uint_least16_t;\ntypedef __int32_t __int_least32_t;\ntypedef __uint32_t __uint_least32_t;\ntypedef __int64_t __int_least64_t;\ntypedef __uint64_t __uint_least64_t;\n\n\n\ntypedef long int __quad_t;\ntypedef unsigned long int __u_quad_t;\n\n\n\n\n\n\n\ntypedef long int __intmax_t;\ntypedef unsigned long int __uintmax_t;\n# 141 "/usr/include/x86_64-linux-gnu/bits/types.h" 3 4\n# 1 "/usr/include/x86_64-linux-gnu/bits/typesizes.h" 1 3 4\n# 142 "/usr/include/x86_64-linux-gnu/bits/types.h" 2 3 4\n# 1 "/usr/include/x86_64-linux-gnu/bits/time64.h" 1 3 4\n# 143 "/usr/include/x86_64-linux-gnu/bits/types.h" 2 3 4\n\n\ntypedef unsigned long int __dev_t;\ntypedef unsigned int __uid_t;\ntypedef unsigned int __gid_t;\ntypedef unsigned long int __ino_t;\ntypedef unsigned long int __ino64_t;\ntypedef unsigned int __mode_t;\ntypedef unsigned long int __nlink_t;\ntypedef long int __off_t;\ntypedef long int __off64_t;\ntypedef int __pid_t;\ntypedef struct { int __val[2]; } __fsid_t;\ntypedef long int __clock_t;\ntypedef unsigned long int __rlim_t;\ntypedef unsigned long int __rlim64_t;\ntypedef unsigned int __id_t;\ntypedef long int __time_t;\ntypedef unsigned int __useconds_t;\ntypedef long int __suseconds_t;\ntypedef long int __suseconds64_t;\n\ntypedef int __daddr_t;\ntypedef int __key_t;\n\n\ntypedef int __clockid_t;\n\n\ntypedef void * __timer_t;\n\n\ntypedef long int __blksize_t;\n\n\n\n\ntypedef long int __blkcnt_t;\ntypedef long int __blkcnt64_t;\n\n\ntypedef unsigned long int __fsblkcnt_t;\ntypedef unsigned long int __fsblkcnt64_t;\n\n\ntypedef unsigned long int __fsfilcnt_t;\ntypedef unsigned long int __fsfilcnt64_t;\n\n\ntypedef long int __fsword_t;\n\ntypedef long int __ssize_t;\n\n\ntypedef long int __syscall_slong_t;\n\ntypedef unsigned long int __syscall_ulong_t;\n\n\n\ntypedef __off64_t __loff_t;\ntypedef char *__caddr_t;\n\n\ntypedef long int __intptr_t;\n\n\ntypedef unsigned int __socklen_t;\n\n\n\n\ntypedef int __sig_atomic_t;\n# 39 "/usr/include/stdio.h" 2 3 4\n# 1 "/usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h" 1 3 4\n\n\n\n\n# 1 "/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h" 1 3 4\n# 13 "/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h" 3 4\ntypedef struct\n{\n int __count;\n union\n {\n unsigned int __wch;\n char __wchb[4];\n } __value;\n} __mbstate_t;\n# 6 "/usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h" 2 3 4\n\n\n\n\ntypedef struct _G_fpos_t\n{\n __off_t __pos;\n __mbstate_t __state;\n} __fpos_t;\n# 40 "/usr/include/stdio.h" 2 3 4\n# 1 "/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h" 1 3 4\n# 10 "/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h" 3 4\ntypedef struct _G_fpos64_t\n{\n __off64_t __pos;\n __mbstate_t __state;\n} __fpos64_t;\n# 41 "/usr/include/stdio.h" 2 3 4\n# 1 "/usr/include/x86_64-linux-gnu/bits/types/__FILE.h" 1 3 4\n\n\n\nstruct _IO_FILE;\ntypedef struct _IO_FILE __FILE;\n# 42 "/usr/include/stdio.h" 2 3 4\n# 1 "/usr/include/x86_64-linux-gnu/bits/types/FILE.h" 1 3 4\n\n\n\nstruct _IO_FILE;\n\n\ntypedef struct _IO_FILE FILE;\n# 43 "/usr/include/stdio.h" 2 3 4\n# 1 "/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h" 1 3 4\n# 35 "/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h" 3 4\nstruct _IO_FILE;\nstruct _IO_marker;\nstruct _IO_codecvt;\nstruct _IO_wide_data;\n\n\n\n\ntypedef void _IO_lock_t;\n\n\n\n\n\nstruct _IO_FILE\n{\n int _flags;\n\n\n char *_IO_read_ptr;\n char *_IO_read_end;\n char *_IO_read_base;\n char *_IO_write_base;\n char *_IO_write_ptr;\n char *_IO_write_end;\n char *_IO_buf_base;\n char *_IO_buf_end;\n\n\n char *_IO_save_base;\n char *_IO_backup_base;\n char *_IO_save_end;\n\n struct _IO_marker *_markers;\n\n struct _IO_FILE *_chain;\n\n int _fileno;\n int _flags2;\n __off_t _old_offset;\n\n\n unsigned short _cur_column;\n signed char _vtable_offset;\n char _shortbuf[1];\n\n _IO_lock_t *_lock;\n\n\n\n\n\n\n\n __off64_t _offset;\n\n struct _IO_codecvt *_codecvt;\n struct _IO_wide_data *_wide_data;\n struct _IO_FILE *_freeres_list;\n void *_freeres_buf;\n size_t __pad5;\n int _mode;\n\n char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];\n};\n# 44 "/usr/include/stdio.h" 2 3 4\n# 52 "/usr/include/stdio.h" 3 4\ntypedef __gnuc_va_list va_list;\n# 63 "/usr/include/stdio.h" 3 4\ntypedef __off_t off_t;\n# 77 "/usr/include/stdio.h" 3 4\ntypedef __ssize_t ssize_t;\n\n\n\n\n\n\ntypedef __fpos_t fpos_t;\n# 133 "/usr/include/stdio.h" 3 4\n# 1 "/usr/include/x86_64-linux-gnu/bits/stdio_lim.h" 1 3 4\n# 134 "/usr/include/stdio.h" 2 3 4\n# 143 "/usr/include/stdio.h" 3 4\nextern FILE *stdin;\nextern FILE *stdout;\nextern FILE *stderr;\n\n\n\n\n\n\nextern int remove (const char *__filename) __attribute__ ((__nothrow__ , __leaf__));\n\nextern int rename (const char *__old, const char *__new) __attribute__ ((__nothrow__ , __leaf__));\n\n\n\nextern int renameat (int __oldfd, const char *__old, int __newfd,\n const char *__new) __attribute__ ((__nothrow__ , __leaf__));\n# 178 "/usr/include/stdio.h" 3 4\nextern int fclose (FILE *__stream);\n# 188 "/usr/include/stdio.h" 3 4\nextern FILE *tmpfile (void)\n __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) ;\n# 205 "/usr/include/stdio.h" 3 4\nextern char *tmpnam (char[20]) __attribute__ ((__nothrow__ , __leaf__)) ;\n\n\n\n\nextern char *tmpnam_r (char __s[20]) __attribute__ ((__nothrow__ , __leaf__)) ;\n# 222 "/usr/include/stdio.h" 3 4\nextern char *tempnam (const char *__dir, const char *__pfx)\n __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (__builtin_free, 1)));\n\n\n\n\n\n\nextern int fflush (FILE *__stream);\n# 239 "/usr/include/stdio.h" 3 4\nextern int fflush_unlocked (FILE *__stream);\n# 258 "/usr/include/stdio.h" 3 4\nextern FILE *fopen (const char *__restrict __filename,\n const char *__restrict __modes)\n __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) ;\n\n\n\n\nextern FILE *freopen (const char *__restrict __filename,\n const char *__restrict __modes,\n FILE *__restrict __stream) ;\n# 293 "/usr/include/stdio.h" 3 4\nextern FILE *fdopen (int __fd, const char *__modes) __attribute__ ((__nothrow__ , __leaf__))\n __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) ;\n# 308 "/usr/include/stdio.h" 3 4\nextern FILE *fmemopen (void *__s, size_t __len, const char *__modes)\n __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) ;\n\n\n\n\nextern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __attribute__ ((__nothrow__ , __leaf__))\n __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) ;\n# 328 "/usr/include/stdio.h" 3 4\nextern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__));\n\n\n\nextern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,\n int __modes, size_t __n) __attribute__ ((__nothrow__ , __leaf__));\n\n\n\n\nextern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,\n size_t __size) __attribute__ ((__nothrow__ , __leaf__));\n\n\nextern void setlinebuf (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));\n\n\n\n\n\n\n\nextern int fprintf (FILE *__restrict __stream,\n const char *__restrict __format, ...);\n\n\n\n\nextern int printf (const char *__restrict __format, ...);\n\nextern int sprintf (char *__restrict __s,\n const char *__restrict __format, ...) __attribute__ ((__nothrow__));\n\n\n\n\n\nextern int vfprintf (FILE *__restrict __s, const char *__restrict __format,\n __gnuc_va_list __arg);\n\n\n\n\nextern int vprintf (const char *__restrict __format, __gnuc_va_list __arg);\n\nextern int vsprintf (char *__restrict __s, const char *__restrict __format,\n __gnuc_va_list __arg) __attribute__ ((__nothrow__));\n\n\n\nextern int snprintf (char *__restrict __s, size_t __maxlen,\n const char *__restrict __format, ...)\n __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 4)));\n\nextern int vsnprintf (char *__restrict __s, size_t __maxlen,\n const char *__restrict __format, __gnuc_va_list __arg)\n __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 0)));\n# 403 "/usr/include/stdio.h" 3 4\nextern int vdprintf (int __fd, const char *__restrict __fmt,\n __gnuc_va_list __arg)\n __attribute__ ((__format__ (__printf__, 2, 0)));\nextern int dprintf (int __fd, const char *__restrict __fmt, ...)\n __attribute__ ((__format__ (__printf__, 2, 3)));\n\n\n\n\n\n\n\nextern int fscanf (FILE *__restrict __stream,\n const char *__restrict __format, ...) ;\n\n\n\n\nextern int scanf (const char *__restrict __format, ...) ;\n\nextern int sscanf (const char *__restrict __s,\n const char *__restrict __format, ...) __attribute__ ((__nothrow__ , __leaf__));\n\n\n\n\n\n# 1 "/usr/include/x86_64-linux-gnu/bits/floatn.h" 1 3 4\n# 119 "/usr/include/x86_64-linux-gnu/bits/floatn.h" 3 4\n# 1 "/usr/include/x86_64-linux-gnu/bits/floatn-common.h" 1 3 4\n# 24 "/usr/include/x86_64-linux-gnu/bits/floatn-common.h" 3 4\n# 1 "/usr/include/x86_64-linux-gnu/bits/long-double.h" 1 3 4\n# 25 "/usr/include/x86_64-linux-gnu/bits/floatn-common.h" 2 3 4\n# 120 "/usr/include/x86_64-linux-gnu/bits/floatn.h" 2 3 4\n# 431 "/usr/include/stdio.h" 2 3 4\n\n\n\nextern int fscanf (FILE *__restrict __stream, const char *__restrict __format, ...) __asm__ ("" "__isoc99_fscanf")\n\n ;\nextern int scanf (const char *__restrict __format, ...) __asm__ ("" "__isoc99_scanf")\n ;\nextern int sscanf (const char *__restrict __s, const char *__restrict __format, ...) __asm__ ("" "__isoc99_sscanf") __attribute__ ((__nothrow__ , __leaf__))\n\n ;\n# 459 "/usr/include/stdio.h" 3 4\nextern int vfscanf (FILE *__restrict __s, const char *__restrict __format,\n __gnuc_va_list __arg)\n __attribute__ ((__format__ (__scanf__, 2, 0))) ;\n\n\n\n\n\nextern int vscanf (const char *__restrict __format, __gnuc_va_list __arg)\n __attribute__ ((__format__ (__scanf__, 1, 0))) ;\n\n\nextern int vsscanf (const char *__restrict __s,\n const char *__restrict __format, __gnuc_va_list __arg)\n __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__format__ (__scanf__, 2, 0)));\n\n\n\n\n\nextern int vfscanf (FILE *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vfscanf")\n\n\n\n __attribute__ ((__format__ (__scanf__, 2, 0))) ;\nextern int vscanf (const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vscanf")\n\n __attribute__ ((__format__ (__scanf__, 1, 0))) ;\nextern int vsscanf (const char *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vsscanf") __attribute__ ((__nothrow__ , __leaf__))\n\n\n\n __attribute__ ((__format__ (__scanf__, 2, 0)));\n# 513 "/usr/include/stdio.h" 3 4\nextern int fgetc (FILE *__stream);\nextern int getc (FILE *__stream);\n\n\n\n\n\nextern int getchar (void);\n\n\n\n\n\n\nextern int getc_unlocked (FILE *__stream);\nextern int getchar_unlocked (void);\n# 538 "/usr/include/stdio.h" 3 4\nextern int fgetc_unlocked (FILE *__stream);\n# 549 "/usr/include/stdio.h" 3 4\nextern int fputc (int __c, FILE *__stream);\nextern int putc (int __c, FILE *__stream);\n\n\n\n\n\nextern int putchar (int __c);\n# 565 "/usr/include/stdio.h" 3 4\nextern int fputc_unlocked (int __c, FILE *__stream);\n\n\n\n\n\n\n\nextern int putc_unlocked (int __c, FILE *__stream);\nextern int putchar_unlocked (int __c);\n\n\n\n\n\n\nextern int getw (FILE *__stream);\n\n\nextern int putw (int __w, FILE *__stream);\n\n\n\n\n\n\n\nextern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)\n __attribute__ ((__access__ (__write_only__, 1, 2)));\n# 632 "/usr/include/stdio.h" 3 4\nextern __ssize_t __getdelim (char **__restrict __lineptr,\n size_t *__restrict __n, int __delimiter,\n FILE *__restrict __stream) ;\nextern __ssize_t getdelim (char **__restrict __lineptr,\n size_t *__restrict __n, int __delimiter,\n FILE *__restrict __stream) ;\n\n\n\n\n\n\n\nextern __ssize_t getline (char **__restrict __lineptr,\n size_t *__restrict __n,\n FILE *__restrict __stream) ;\n\n\n\n\n\n\n\nextern int fputs (const char *__restrict __s, FILE *__restrict __stream);\n\n\n\n\n\nextern int puts (const char *__s);\n\n\n\n\n\n\nextern int ungetc (int __c, FILE *__stream);\n\n\n\n\n\n\nextern size_t fread (void *__restrict __ptr, size_t __size,\n size_t __n, FILE *__restrict __stream) ;\n\n\n\n\nextern size_t fwrite (const void *__restrict __ptr, size_t __size,\n size_t __n, FILE *__restrict __s);\n# 702 "/usr/include/stdio.h" 3 4\nextern size_t fread_unlocked (void *__restrict __ptr, size_t __size,\n size_t __n, FILE *__restrict __stream) ;\nextern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size,\n size_t __n, FILE *__restrict __stream);\n\n\n\n\n\n\n\nextern int fseek (FILE *__stream, long int __off, int __whence);\n\n\n\n\nextern long int ftell (FILE *__stream) ;\n\n\n\n\nextern void rewind (FILE *__stream);\n# 736 "/usr/include/stdio.h" 3 4\nextern int fseeko (FILE *__stream, __off_t __off, int __whence);\n\n\n\n\nextern __off_t ftello (FILE *__stream) ;\n# 760 "/usr/include/stdio.h" 3 4\nextern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);\n\n\n\n\nextern int fsetpos (FILE *__stream, const fpos_t *__pos);\n# 786 "/usr/include/stdio.h" 3 4\nextern void clearerr (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));\n\nextern int feof (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;\n\nextern int ferror (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;\n\n\n\nextern void clearerr_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));\nextern int feof_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;\nextern int ferror_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;\n\n\n\n\n\n\n\nextern void perror (const char *__s);\n\n\n\n\nextern int fileno (FILE *__strea
| 归档时间: |
|
| 查看次数: |
361 次 |
| 最近记录: |