您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
为什么c语言中有时需要函数声明有时不用函数声明
发布时间:2021-04-23 21:04:21编辑:雪饮阅读()
在c语言中对于方法有声明和定义两个阶段。但是在使用过程中你会发现有时候函数只需要定义,不需要声明也能用,但是有时候函数必须要声明,只定义是不行的。
这里可以看到这个merge_sort函数只是定义了,但是却没有声明。然后编译时候就报错了。
那么我们将这个merge_sort函数的定义放到main函数之前
#include <stdio.h>
#include <stdlib.h>
int min(int x, int y) {
return x < y ? x : y;
}
void merge_sort(int arr[], int len) {
int* a = arr;
int* b = (int*) malloc(len * sizeof(int));
int seg, start;
for (seg = 1; seg < len; seg += seg) {
for (start = 0; start < len; start += seg + seg) {
int low = start, mid = min(start + seg, len), high = min(start + seg + seg, len);
int k = low;
int start1 = low, end1 = mid;
int start2 = mid, end2 = high;
while (start1 < end1 && start2 < end2)
b[k++] = a[start1] < a[start2] ? a[start1++] : a[start2++];
while (start1 < end1)
b[k++] = a[start1++];
while (start2 < end2)
b[k++] = a[start2++];
}
int* temp = a;
a = b;
b = temp;
}
if (a != arr) {
int i;
for (i = 0; i < len; i++)
b[i] = a[i];
b = a;
}
//輸出
for(int x=0;x<len;x++){
printf("%d\n",arr[x]);
}
free(b);
}
void main(){
int arr[]={8,2,3,7,9,5,1,6};
int len=8;
merge_sort(arr,len);
}
然后重新编译并执行就没有问题了
D:\cproject>gcc main.c -o m
D:\cproject>m.exe
1
2
3
5
6
7
8
9
其实这里到底是否需要声明,取决于函数定义的位置,若函数定义的位置位于调用它的代码之前,此时就不需要提前声明了。
关键字词:c语言,声明,定义,函数,位置
上一篇:c语言实现希尔排序算法
下一篇:c语言归并排序迭代法的实现