#include <stdio.h>
main()
printf();
预处理器和函数之间有什么联系?
答案 0 :(得分:2)
当C预处理器读取行#include <stdio.h>
时,它从字面上读取系统目录中的文件stdio.h
,并将该行替换为内容。然后stdio.h
包含printf
和其他函数的声明,告诉C编译器这些函数存在于另一个文件或库中。
当您在代码中使用printf()
时,编译器会知道此函数并知道它不必担心它。 (但是,如果你没有包含stdio.h
,那么编译器就不会知道函数的样子,这可能很麻烦,编译器会抱怨这个。)
带有stdio.h
的示例printf
文件可能如下所示:
/* stdio.h */
// Declaration of printf
int printf(const char *format, ...);
// And also a bunch of other function declarations...
答案 1 :(得分:1)
预处理程序指令#include
只包含源文件中包含它们的头文件的来源。
更多信息#include
因此,在这种情况下,#include
将在您的程序中包含stdio.h
头文件的来源。
头文件stdio.h
包含标准输入输出函数的声明,这些函数实际上是在libc中定义的,它由动态链接器作为程序地址空间中的共享库加载。
答案 2 :(得分: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);
正如您所见printf()
<Stdio.h>
答案 3 :(得分:0)
编译器需要知道函数 printf()的参数及其类型。程序员使用声明告诉它该信息。标准C库使用标准化的头文件集合,其中包含标准C库中函数的声明。 printf()就是其中之一,它的声明在 stdio.h 中。 如果您使用的是Linux,那么每当您使用标准C库函数时,您都可以查看它的手册页,并找到相应的头文件来#include您所使用的函数的声明。重新使用。有一些类别的函数将它们各自的声明聚合成一个或多或少适当命名的头文件。