下面说法不正确的是:( )
A.scanf和printf是针对标准输入、输出流的格式化输入、输出语句
B.fscanf和fprintf是针对所有输入、输出流的格式化输入、输出语句
C.sscanf是从字符串中读取格式化的数据
D.sprintf是把格式化的数据写到输出流中
D选项中,sprintf是把格式化的数据写到字符串中,与输出流无关。其他三句都准确描述了函数功能。
关于feof函数描述不正确的是:( )
A.feof函数是用来判断文件是否读取结束的
B.feof函数是在文件读取结束的时候,检测是否是因为遇到了文件结束标志EOF,而读取结束
C.读取文本判断是否结束时,fgetc看返回值是否为EOF, fgets看返回值是否为NULL
D.二进制文件判断读取结束,看实际读取个数是否小于要求读取个数
说明:feof函数是在文件读取结束后,判断文件读取结束的原因的,是读取失败结束,还是遇到文件尾结束。所以A是错误的,其他选项均正确。
由多个源文件组成的C程序,经过编辑、预处理、编译、链接等阶段会生成最终的可执行程序。下面哪个阶段可以发现被调用的函数未定义?( )
A.预处理
B.编译
C.链接
D.执行
预处理只会处理#开头的语句,编译阶段只校验语法,链接时才会去找实体,所以是链接时出错的,故选C。这里附上每个步骤的具体操作方式:
预处理:相当于根据预处理指令组装新的C/C++程序。经过预处理,会产生一个没有头文件(都已经被展开了)、宏定义(都已经替换了),没有条件编译指令(该屏蔽的都屏蔽掉了),没有特殊符号的输出文件,这个文件的含义同原本的文件无异,只是内容上有所不同。
编译:将预处理完的文件逐一进行一系列词法分析、语法分析、语义分析及优化后,产生相应的汇编代码文件。编译是针对单个文件编译的,只校验本文件的语法是否有问题,不负责寻找实体。
链接:通过链接器将一个个目标文件(或许还会有库文件)链接在一起生成一个完整的可执行程序。 链接程序的主要工作就是将有关的目标文件彼此相连接,也就是将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的这些目标文件成为一个能够被操作系统装入执行的统一整体。在此过程中会发现被调用的函数未被定义。需要注意的是,链接阶段只会链接调用了的函数/全局变量,如果存在一个不存在实体的声明(函数声明、全局变量的外部声明),但没有被调用,依然是可以正常编译执行的。
( ) 的作用是将源程序文件进行处理,生成一个中间文件,编译系统将对此中间文件进行编译并生成目标代码。
A.预处理
B.汇编
C.生成安装文件
D.编译
题干中提到了“编译”,说明是编译的上一步,那自然是预处理。故选A
test.c文件中包括如下语句:
#define INT_PTR int* typedef int*int_ptr; INT_PTR a,b; int_ptr c,d;
文件中定义的四个变量,哪个变量不是指针类型?( )
A.a
B.b
C.c
D.d
预处理的#define是查找替换,所以替换过后的语句是“int*a,b;”,其中b只是一个int变量,如果要让b也是指针,必须写成“int *a, *b;”。而typedef没有这个问题,c、d都是指针。故选B。
关于C语言运行环境说法错误的是?
A.程序运行之前需要先载入内存中
B.载入内存后,便找到main函数,从main函数的开始位置开始执行
C.程序运行起来后,会为每一次函数调用创建运行时运行时堆栈,程序运行的上下文信息就放在运行堆栈中维护
D.程序运行起来就无法终止
D:程序运行结束就停止了,还可以通过ctr+c等方式终止程序。