#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

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

4回复

C编程指令#include 的printf

我有这个简单的你好世界计划。 第一行显示#include <stdio.h> 。 我用谷歌搜索它,它基本上告诉预处理器定义输入/输出的功能。 第一个问题: 我读到该函数的实际代码首先被编译为一个目标文件。 所以如果我说#include <foo.bar>
1回复

android NDK致命错误:stdio.h:没有这样的文件或目录#include

我正在尝试为我的Archlinux中的Qt android项目构建QPSQL驱动程序,该驱动程序不断失败 所以我尝试了简单的你好世界计划: - 这意味着arm-linux-androideabi-cpp预处理器无法正常工作,对吧? 但我从Qt Creator和Android
6回复
1回复

C #include pbl.h路径

我正在使用C在本地计算机上的项目。 我想从PBL( http://www.mission-base.com/peter/source/ )借用数据结构实现。 当我从PBL的github存储库下载zip文件时,其中包含数百个文件。 要自由使用PBL库中的内容,应该使用#inclu
3回复

为什么stddef.h不在/ usr / include中?

我编译了gnu标准库并将其安装在$GLIBC_INST 。 现在,我尝试编译一个非常简单的程序(只使用一个#include: #include <stdio.h> ): 编译(预处理器?)告诉我,它没有找到stddef.h 。 事实上, $GLIBC_INST/i
5回复

我说#include时,如何告诉预处理器在头文件的特定文件夹中搜索

我大约有120个头文件(.h文件),并且每个文件都使用#include <abcd/xyz.h>包含许多其他头文件,但是由于我将.h文件保存在特定的文件夹中,因此预处理程序正在生成filenotfound错误。 我将所有.h文件移动到了调用第一个头文件的单个.C文件中。
2回复

#define,然后printf无法正常工作

对于分配,我必须将变量N定义为100,然后在printf语句中调用该变量。 代码如下: N只是以N而不是100 。
3回复

'printf'的原理

我想知道的是编译器和程序的工作方式。 例如,在“你好,世界!”中 举个例子,比如hello.c,众所周知,它是这样的:(使用GNU gcc) 你好,世界! 我只是问一个问题,如何定义或使用printf ,这是最简单和熟悉的功能之一。 为了自己找到答案,我发现整个
4回复

在两个不同的头文件中的两个结构中包含循环依赖关系是错误的吗?

我有一个很大的程序无法编译,我怀疑它与跨结构的循环依赖关系有关。 当我像下面这样编码时,它将无法编译 foo.h中 bar.h 但是,如果我完全将自己的设计修改成一个common.h文件,并将所有的struct声明放在那里,那似乎就可以了。 COMMON.H
5回复

C语言宏中的printf

我有这样的宏 这样它将打印到文件和控制台,例如,我调用此宏函数 在某种程度上,我需要将y = 9显示为参数A的一部分,以便文件中的fprintf如下所示 因为如果要更改此设置,我需要进行很多更改,因此希望有一个简单的出路=)