我现在正在通过 Zed A. Shaw 的 Learn C the Hard Way 学习 C 编程。有这段代码(取自他的网站):
#include <stdio.h>
#include <ctype.h>
// forward declarations
int can_print_it(char ch);
void print_letters(char arg[]);
void print_arguments(int argc, char *argv[])
{
int i = 0;
for(i = 0; i < argc; i++) {
print_letters(argv[i]);
}
}
void print_letters(char arg[])
{
int i = 0;
for(i = 0; arg[i] != '\0'; i++) {
char ch = arg[i];
if(can_print_it(ch)) {
printf("'%c' == %d ", ch, ch);
}
}
printf("\n");
}
int can_print_it(char ch)
{
return isalpha(ch) || isblank(ch);
}
int main(int argc, char *argv[])
{
print_arguments(argc, argv);
return 0;
}
难道我们不能像这样编写代码(将 can_print_it
和 print_letters
函数放在顶部并删除前向声明的需要):
#include <stdio.h>
#include <ctype.h>
int can_print_it(char ch)
{
return isalpha(ch) || isblank(ch);
}
void print_letters(char arg[])
{
int i = 0;
for(i = 0; arg[i] != '\0'; i++) {
char ch = arg[i];
if(can_print_it(ch)) {
printf("'%c' == %d ", ch, ch);
}
}
printf("\n");
}
真的有前向声明很重要且不可避免的时候吗?
最佳答案
只要你的调用图是循环的,函数的前向声明是不可避免的;也就是说,只要您在函数之间进行(直接或间接)递归。
如果您想将程序分成多个翻译单元,它们很有用,因为它们允许分离函数的声明和定义(将声明放在 .h
header 和 .c
文件中的定义)。
关于c - C编程中前向声明的意义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35084608/