正在加载图片...
8.1在缺少函数原型的函数调用中,编译器是如何处理的 答:编译器先假定调用是正确的,同时还假定被调用函数将返回一个整型值,如果调用 事实上是错误的,编译器不能捕获这个错误,要运行这个程序才知道错了:如果被调用函数 返回的不是整数,也将导致错误。 8.2一个定义返回值类型为T1的函数,但该函数体内的 return语句却返回一个类型为 T2的表达式,调用会发生什么情况? 答:如果编译器通过算术转换能够把表达式为T2的类型转换为T1的类型时,程序能正 常运行;否则,编译器将捕获到这个错误 8.3一个定义返回值类型为void的函数,但该函数返回一个值,这将导致什么错误? 答:这是一个语法错误 8.4一个定义返回值类型为非void的函数,但该函数没有返回一个值。这将导致什么 后果? 答: ANSI C认为这种行为是未定义的。未定义的行为其后果是无法预料的。 8.5如果函数的返回值类型不是int类型,并且函数定义出现在函数调用之后,当缺少 函数原型声明会发生什么情况? 答:有些编译器认为这是一个语法错误。这当然是幸运的。但 ANSI C并不检测这个错 误,因此,如果编译器认定函数返回一个整型值,它将产生整数指令处理这个值,如果这个 值实际上不是整型值,其结果通常是错误的。 8.6传递给函数的参数个数、类型和顺序应该与函数定义匹配,编译器能够用函数原型 校验函数调用是否正确。但对于那些没有原型的函数,如果传递的实参与形参不匹配,会出 现什么情况? 答:如果定义在前,调用在后,参数个数不匹配这个错误将被捕获;类型不匹配将实参 自动进行类型提升,例如,char和 short类型的实参被转换为int型, float类型将向 double 类型转换。如果调用在前,定义在后,其结果不可预料。 8.7为什么说在一个表达式内部调用没有返回值的函数将是一个严重的错误? 答:因为该表达式的值将是不可预测的。 8.8对于如下定义语句: 其定义点出现在函数外部和函数内部时,它们在行为上有什么不同? 答:出现在函数外部时,它是外部变量,仅被初始化一次:出现在函数内部时,它是自 动变量,每次进入该代码块时都被初始化一次 8.9如果在某代码块内有如下定义语句 extern int a: 其中a是自动变量。试问:它在语法上是否有错?为什么? 答:它在语法上没有错误。因为关键字 extern对自动变量不起作用,也就不能改变自 动变量的链接属性, extern在这个定义语句中是多余的。但是,如果定义者的本意是想在 此处引用其它函数定义的自动变量a,那他在概念上犯了一个大错误 10下面的程序存在什么错误?为什么? #include <stdio. h float f(float, int) int maino float x=3.14 static int y= f(x, 3)1 8.1 在缺少函数原型的函数调用中,编译器是如何处理的? 答: 编译器先假定调用是正确的,同时还假定被调用函数将返回一个整型值,如果调用 事实上是错误的,编译器不能捕获这个错误,要运行这个程序才知道错了;如果被调用函数 返回的不是整数,也将导致错误。 8.2 一个定义返回值类型为 T1 的函数,但该函数体内的 return 语句却返回一个类型为 T2 的表达式,调用会发生什么情况? 答:如果编译器通过算术转换能够把表达式为 T2 的类型转换为 T1 的类型时,程序能正 常运行;否则,编译器将捕获到这个错误。 8.3 一个定义返回值类型为 void 的函数,但该函数返回一个值,这将导致什么错误? 答:这是一个语法错误。 8.4 一个定义返回值类型为非 void 的函数,但该函数没有返回一个值。这将导致什么 后果? 答:ANSI C 认为这种行为是未定义的。未定义的行为其后果是无法预料的。 8.5 如果函数的返回值类型不是 int 类型,并且函数定义出现在函数调用之后,当缺少 函数原型声明会发生什么情况? 答:有些编译器认为这是一个语法错误。这当然是幸运的。但 ANSI C 并不检测这个错 误,因此,如果编译器认定函数返回一个整型值,它将产生整数指令处理这个值,如果这个 值实际上不是整型值,其结果通常是错误的。 8.6 传递给函数的参数个数、类型和顺序应该与函数定义匹配,编译器能够用函数原型 校验函数调用是否正确。但对于那些没有原型的函数,如果传递的实参与形参不匹配,会出 现什么情况? 答:如果定义在前,调用在后,参数个数不匹配这个错误将被捕获;类型不匹配将实参 自动进行类型提升,例如,char 和 short 类型的实参被转换为 int 型,float 类型将向 double 类型转换。如果调用在前,定义在后,其结果不可预料。 8.7 为什么说在一个表达式内部调用没有返回值的函数将是一个严重的错误? 答:因为该表达式的值将是不可预测的。 8.8 对于如下定义语句: int x = 10; 其定义点出现在函数外部和函数内部时,它们在行为上有什么不同? 答:出现在函数外部时,它是外部变量,仅被初始化一次;出现在函数内部时,它是自 动变量,每次进入该代码块时都被初始化一次。 8.9 如果在某代码块内有如下定义语句: extern int a; 其中 a 是自动变量。试问:它在语法上是否有错?为什么? 答:它在语法上没有错误。因为关键字 extern 对自动变量不起作用,也就不能改变自 动变量的链接属性,extern 在这个定义语句中是多余的。但是,如果定义者的本意是想在 此处引用其它函数定义的自动变量 a,那他在概念上犯了一个大错误。 8.10 下面的程序存在什么错误?为什么? #include <stdio.h> float f(float,int); int main() { float x = 3.14; static int y = f(x,3);
向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有