C语言函数声明是要在主函数内部还是外部啊?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言函数声明是要在主函数内部还是外部啊?相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
int main()

int process(int u,int t,int (*p)(int u,int t));
int a,b,c[3],i;
scanf("%d%d",&a,&b);
int max(int x,int y);
int min(int j,int k);
int sum(int q,int w);
c[0]=process(a,b,max);
c[1]=process(a,b,min);
c[2]=process(a,b,sum);
printf("the max is %d\nthe min is %d\nthe sum is %d\n",c[0],c[1],c[2]);
return 0;


int max(int x,int y)

if(y>x)x=y;
return x;


int min(int j,int k)

if(k<j)j=k;
return j;


int sum(int q,int w)

return q+w;


int process(int u,int t,int (*p)(int,int))

int f;
f=(*p)(u,t);
return f;


就这个程序而言,必须在外部声明才对吧?我试过这样不行,把声明拿出去就对了,但是看谭浩强的书,好像有很多在主函数内部声明的

函数声明定义 放在 主函数以外,与主函数地位 并列,不能放在主函数以内。

函数定义 放在 主函数 以后,那么在 主函数以前,或 在主函数声明部分(语句以前)要添加函数原型声明。

函数声明定义,若放在主函数以前, 主函数中 则 不需要 函数原型声明。

程序结构:
int main()

int process(int u,int t,int (*p)(int u,int t)); // 函数原型声明
int a,b,c[3],i;
int max(int x,int y); // 函数原型声明
int min(int j,int k); // 函数原型声明
int sum(int q,int w); // 函数原型声明
scanf("%d%d",&a,&b); // 这是语句,要放到声明以后,所以搬动到这里
。。。 // 其他语句


int max(int x,int y) // 函数声明定义,在主函数以后
if(y>x)x=y;
return x;

。。。 // 其他 函数声明定义
参考技术A 可以再内部声明,要放在定义的变量之前,这样就行了
#include<stdio.h>

int main()

int max(int x,int y);
int min(int j,int k);
int sum(int q,int w);
int process(int u,int t,int (*p)(int u,int t));
int a,b,c[3],i;
scanf("%d%d",&a,&b);

c[0]=process(a,b,max);
c[1]=process(a,b,min);
c[2]=process(a,b,sum);
printf("the max is %d\nthe min is %d\nthe sum is %d\n",c[0],c[1],c[2]);
return 0;


int max(int x,int y)

if(y>x)x=y;
return x;


int min(int j,int k)

if(k<j)j=k;
return j;


int sum(int q,int w)

return q+w;


int process(int u,int t,int (*p)(int,int))

int f;
f=(*p)(u,t);
return f;
参考技术B C语言函数声明是在主函数内部。 参考技术C 内部和外部都可以的哦~~~~~~ 你的程序在C99的C-FREE上没有问题。。。
可能你的C语言版本有问题的说,因为大部分人都用的是VC 6.0~~~~~~
参考技术D 声明是函数体内部,在外部一般都是定义,只有用extern是表声明

C语言概述

一. C语言程序初识,先介绍一个简单的C语言程序:
#include <stdio.h>

int arr[100000]; //声明一个较大的整型数组,尽量放在函数外部
/*原因是:
函数内部申请的局部变量空间,来自于系统栈,空间较小
而函数外部申请的全局变量空间,来自于静态存储区,空间较大
*/
int global; //声明一个全局变量

int main(void)
int num = 0;
printf("%d", num);
//旧的C语言规定变量声明要放在当前程序块的最前面
//C99和C11遵循C++的惯例,可以把声明放在块中的任意位置,但实际上很多编译器不支持C99
printf("这是一个简单的C语言程序");
return 0;
二. 接下来对上述程序做一个简要的概述:
1.#include和头文件:提供了一种方便的途径共享许多程序所共有的信息

#include <stdio.h>的作用相当于把stdio.h文件中的全部内容都输入第一行所在的位置,实际上就是一种”复制粘贴”的操作,其中stdio.h是标准输入/输出头文件

#include这行代码是一条C语言预处理指令,预处理是程序执行的必要步骤之一。(新学者可以记住这个知识点,后面学操作系统,编译原理等等都可能会涉及,并且这也是计算机408考研,复试提问可能问到的)

2.main()函数

int main(void),int是main函数的返回类型,表明main函数的返回值是一个整数,main函数的返回值是返回给操作系统;main函数是程序运行的唯一入口;(void)表示main函数不带任何参数。

void main()在有些编译器中允许这样写,但是C语言标准并未认可这种写法,不建议使用。

3.花括号、函数体和块

花括号括起来的是C语言的函数体或者代码块,当括起来的函数体时是不能省略的,相当于某些编程语言的begin和end。

4.注释

/* 注释内容可以让程序的可读性更强 */——多行注释

//是C99新增的注释——单行注释

5.声明

int num叫作变量声明,声明是C语言最重要的特性之一,在C语言中所有变量都必须先声明再使用。

int 是C语言的一个关键字,表示一种基本的C语言数据类型;

num是C语言的一个标识符,也就是一个变量、函数或其他实体的名称。而给变量命名时,不能使用关键字,且最好要使用有意义的变量名或标识符,也可以添加注释进一步说明,这是一种良好的编程习惯和编程技巧。

变量命名可以使用小写字母、大写字母、数字和下划线(_)来命名,名称的第一个字符不能是数字,且按照C99和C11标准编译器最多识别前63个字符,对于外部标识符(extern ex_num)只允许使用31个字符。C语言名称区分大小写。

因此,声明把特定的标识符与计算机内存中的特定位置联系起来,同时也确定了储存在某位置的信息类型或数据类型。声明有诸多好处,这里不做补充,了解这是C语言的优点即可。

6.赋值

num = 0;时赋值表达式语句,也是C语言的基本操作之一。在对变量进行命名后,必须对其赋值,否则其值会是内存单元中存储的乱七八糟的数。

7.printf()函数

这是C语言的一个标准函数:printf()。圆括号()表明printf是一个函数名,f是提醒我们这是一种格式化打印函数,而()中的值是main()函数传递给printf()函数的信息,该信息被称为参数。

参数包括实际参数和形式参数,简称实参和形参,实际参数是传递给printf的特定值,而形参是函数中用于存储值的变量,如

printf("%d", num);
printf("这是一个简单的C语言程序");

0就表示传入printf中的实参,num表示形参,"这是一个简单的C语言程序"也表示实参;%d相当于是一个占位符,其作用是表明输出num的值的位置,d表明把变量作为十进制整数进行打印。

8.return语句

return语句是函数返回语句,int main表示函数返回一个整数;如果遗漏函数中的return语句,程序在运行至右花括号时会返回0,但是不建议漏写,这是一种良好的编程习惯。

三. C程序的组成

下面是展示的C程序伪代码

#include——预处理指令

int main(void)——main()总是第1个被调用的函数,即程序运行的唯一入口;这是一个组成函数语句

function a()——这是一个组成函数语句

function b()——这是一个组成函数语句,函数是C程序的构造块

C语言中的6种语句:标号语句、复合语句、表达式语句、选择语句、迭代语句、跳转语句,由关键字、标识符、运算符和数据组成。











以上是关于C语言函数声明是要在主函数内部还是外部啊?的主要内容,如果未能解决你的问题,请参考以下文章

c语言静态函数调用问题

C语言中如何把结构体变量定义在主函数内,再调用一个自定义输入函数和输出函数

C语言static 和extern

C语言中函数是如何存储的

C语言概述

C语言 main()前可以放哪些限定的函数!?