#include <stdio.h>
main()

printf();

预处理器和函数之间的连接是什么?

===============>>#1 票数:2 已采纳

当C预处理程序读取行#include <stdio.h> ,它将从系统目录中逐字读取文件stdio.h并将其替换为内容。 然后stdio.h包含printf和其他函数的声明,这些声明告诉C编译器这些函数存在于另一个文件或库中

然后,当您在代码中使用printf()时,编译器就会知道此函数,并且知道不必为此担心。 (但是,如果不包括stdio.h ,则编译器根本不会知道该函数的外观,这可能很麻烦,并且编译器会对此抱怨。)

带有printf的示例stdio.h文件可能如下所示:

/* stdio.h */

// Declaration of printf
int printf(const char *format, ...);

// And also a bunch of other function declarations...

===============>>#2 票数:1

预处理程序指令#include仅在包含头文件的源文件中包含头文件的源。

更多信息#include

因此,在这种情况下, #include将在程序中包含stdio.h头文件的源。

头文件stdio.h包含标准输入输出函数的声明,这些声明实际上是在libc中定义的,它是由动态链接程序作为共享库加载到程序地址空间中的。

===============>>#3 票数:0

<stdio.h>标头将以下宏名称定义为正整数常量表达式:

void     clearerr(FILE *);
char    *ctermid(char *);
char    *cuserid(char *);(LEGACY)
int      fclose(FILE *);
FILE    *fdopen(int, const char *);
int      feof(FILE *);
int      ferror(FILE *);
int      fflush(FILE *);
int      fgetc(FILE *);
int      fgetpos(FILE *, fpos_t *);
char    *fgets(char *, int, FILE *);
int      fileno(FILE *);
void     flockfile(FILE *);
FILE    *fopen(const char *, const char *);
int      fprintf(FILE *, const char *, ...);
int      fputc(int, FILE *);
int      fputs(const char *, FILE *);
size_t   fread(void *, size_t, size_t, FILE *);
FILE    *freopen(const char *, const char *, FILE *);
int      fscanf(FILE *, const char *, ...);
int      fseek(FILE *, long int, int);
int      fseeko(FILE *, off_t, int);
int      fsetpos(FILE *, const fpos_t *);
long int ftell(FILE *);
off_t    ftello(FILE *);
int      ftrylockfile(FILE *);
void     funlockfile(FILE *);
size_t   fwrite(const void *, size_t, size_t, FILE *);
int      getc(FILE *);
int      getchar(void);
int      getc_unlocked(FILE *);
int      getchar_unlocked(void);
int      getopt(int, char * const[], const char); (LEGACY)
char    *gets(char *);
int      getw(FILE *);
int      pclose(FILE *);
void     perror(const char *);
FILE    *popen(const char *, const char *);
int      printf(const char *, ...);
int      putc(int, FILE *);
int      putchar(int);
int      putc_unlocked(int, FILE *);
int      putchar_unlocked(int);
int      puts(const char *);
int      putw(int, FILE *);
int      remove(const char *);
int      rename(const char *, const char *);
void     rewind(FILE *);
int      scanf(const char *, ...);
void     setbuf(FILE *, char *);
int      setvbuf(FILE *, char *, int, size_t);
int      snprintf(char *, size_t, const char *, ...);
int      sprintf(char *, const char *, ...);
int      sscanf(const char *, const char *, int ...);
char    *tempnam(const char *, const char *);
FILE    *tmpfile(void);
char    *tmpnam(char *);
int      ungetc(int, FILE *);
int      vfprintf(FILE *, const char *, va_list);
int      vprintf(const char *, va_list);
int      vsnprintf(char *, size_t, const char *, va_list);
int      vsprintf(char *, const char *, va_list);

如您所见,在<Stdio.h>定义了printf()

===============>>#4 票数:0

编译器需要知道函数printf()的参数及其类型。 程序员使用声明将其告知信息。 标准C库使用标头文件的标准化集合,这些标头文件包含标准C库中功能的声明。 printf()是其中之一,它的声明在stdio.h中 如果您使用的是Linux,则每当使用标准C库函数时,都可以查找它的手册页,并找到合适的头文件用于#include您正在使用的函数的声明。 有几类函数将其各自的声明汇总到数量更少或多或少适当命名的头文件中。

  ask by Djangbu translate from so

未解决问题?本站智能推荐: