gpt4 book ai didi

c - C编程中前向声明的意义是什么?

转载 作者:太空狗 更新时间:2023-10-29 16:46:23 25 4
gpt4 key购买 nike

我现在正在通过 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_itprint_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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com