课本上说,被调函数的返回值是int型或者char型可以缺省对被调函数的说明。这句话是什么意思,是可以不用在主函数前说明函数吗。
谭浩强的书上这么写的吧。这根本就是错的。是tc等个别编译器的特性,不是c标准。
turbo c编译器之所以允许这种奇葩的语法,和当年pc机的内存很小,性能很低有关(c语言最初是在小型机上用的,而不是pc这种微型电脑)。
当时电脑的内存有多小呢?只有几百KB,即便后来286,也就是1MB 2MB,你没看错,现在的电脑起码16GB,是当年电脑内存的上万倍。
这些东西早就过时了。
char类型变量的声明方式与其他类型变量的声明方式相同。下面是一些例子:
char response;
char itable, latan;
以上声明创建了3个char类型的变量:response、itable和latan。
在C语言中,在主函数前如果要调用其他函数,一般需要在主函数前声明该函数。但是在以下情况下可以省略函数说明:
因为在执行调用该函数的语句时,编译器已遇到该函数的定义,便可以根据定义自动推断出该函数的函数说明(包括函数名、参数及返回值类型等)。
因为头文件在使用前已被编译器包含在程序中,其中函数说明已被自动注入程序中。
如果要调用不在主函数之后的函数,可以在主函数前的一段区域中提前声明该函数,或将该函数定义放置在主函数之前,以避免编译器出错。
代码示例:
#include <stdio.h>
#include <stdlib.h>
// 定义函数add
int add(int a, int b) {
return a + b;
}
// 主函数
int main() {
int x = 1, y = 2;
// 调用add函数
int sum = add(x, y);
printf("sum = %d\n", sum);
// 省略函数add的函数说明,因为add定义在主函数之后
return 0;
}
运行结果为:
sum = 3
又如,在以下代码中,函数HexToInt的函数声明放在了主函数的头文件中,因此在主函数中可以直接调用该函数,无需再次声明。
#include <stdio.h>
// 在头文件中声明HexToInt函数
int HexToInt(char *hex, int hexLen, int *pValue);
// 主函数
int main() {
char *hex = "F7E5";
int len = 4;
int value;
// 调用HexToInt函数
HexToInt(hex, len, &value);
printf("hex %s to int %d\n", hex, value);
return 0;
}
// HexToInt函数的具体实现
int HexToInt(char *hex, int hexLen, int *pValue) {
// ...
}