读书人

main函数里宣言函数

发布时间: 2012-09-14 11:53:44 作者: rapoo

main函数里声明函数

C/C++ code
#include <stdio.h>//#include <stdlib.h>#include<ctype.h>#define MAXLINE 1000int getline(char s[],int lim);int strindex(char s[],char t[]);double atof(char s[]);main(){        double sum,atof(char []);//为什么可以再这里声明一个函数?有什么用?    char line[MAXLINE];    int getline(char line[],int m);//为什么可以再这里声明一个函数?有什么用?    sum = 0;    while (getline(line,MAXLINE) > 0)    {        printf("\t%g\n",sum += atof(line));    }    return 0;}double atof(char s[]){    double power;    double sum;    int i,sign;    for(i = 0;isspace(s[i]);++i)    //跳过空格        ;    sign = (s[i] == '-') ? -1 : 1;    //判断符号    if(s[i] == '+' || s[i] == '-')        i++;    sum = 0.0;    power = 1.0;    while(s[i] != '.')    {        sum = sum * 10.0 + (s[i] - '0');        ++i;    }    if(s[i] == '.')        i++;    while(s[i] != '\0')    {        sum = sum * 10.0 + (s[i] - '0');        power *= 10.0;        ++i;    }    return sign * sum / power;}int getline(char s[],int lim){    int c;    int i,j = 0;    for(i = 0;i < lim && (c = getchar()) != EOF && c != '\n';++i)    {        s[j++] = c;    }    if (c == '\n')    {        s[j++] = c;    }    s[j] = '\0';    return j;}int strindex(char s[],char t[]){    int i,j,k;    //j = k = 0;    for(i = 0;s[i] != '\0';++i)    {        for(j = i,k=0;t[k] != '\0' && s[j] == t[k];j++,k++)            ;        if(k > 0 && t[k] == '\0')            return i;    }    return -1;}

问题在上面注释里面。

[解决办法]
函数声明可以放无数份,与定义不同噢。


[解决办法]
函数声明可以放无数份,与定义不同噢。
[解决办法]
(1)这是C语言中的函数预定义,有些其实不是必须的,比如:
int getline(char s[],int lim);
只是在编译时会有告警信息。
(2)C语言中函数预定义实际上是为编译器分配一个函数类型符号,但是,分配之前必须,它必须告诉编译器函数的返回类型、参数类型等信息,只有知道这些信息的情况下,编译器才能为该符号分配相应的内存空间。
(3)如果函数是先定义,后使用,则函数预定义不是必须的。如果函数返回整形,则预定义也不是必须的。
(4)因为函数预定义其实一个变量类型符号,和变量一样,也有作用范围问题。在main内外的定义,它们的作用域是不同的,因此它们可以在不同作用域内重复定义。
(5)实际上,有些编译器在相同的作用域内也允许重复定义,比如VC如下定义也是允许的。
int TestBuf(char *);
int TestBuf(char *);

int TestBuf(char *buf)
{
return 0;
}

void main()
{
printf("TESTOF!\n");
}

[解决办法]
探讨

函数声明可以放无数份,与定义不同噢。

[解决办法]
一楼正解,楼主可能想知道的是下面的情况:
C/C++ code
#include <stdio.h>int main(void){    double a = 3.0, b = 4.0, c;    double gou_gu(double x, double y)    {        return sqrt(x*x + y*y);    }    c = gou_gu(a, b);    printf("c = %.2f\n", c);    return 0;}
[解决办法]
c4droid可以,open watcom不可以
[解决办法]
在开头有了函数的声明,main中有没有都无所谓了,只要在调用函数之前,让编译器知道有这个函数就行
[解决办法]
探讨

一楼正解,楼主可能想知道的是下面的情况:
C/C++ code

#include <stdio.h>

int main(void)
{
double a = 3.0, b = 4.0, c;

double gou_gu(double x, double y)
{
return sqrt(x*x + y*y);
}

c = gou……

[解决办法]
新人求解垃圾在何处···

探讨

引用:

一楼正解,楼主可能想知道的是下面的情况:
C/C++ code

#include <stdio.h>

int main(void)
{
double a = 3.0, b = 4.0, c;

double gou_gu(double x, double y)
{
return sqrt(x*x + y*y);
}
……

[解决办法]
探讨

新人求解垃圾在何处···引用:

引用:

一楼正解,楼主可能想知道的是下面的情况:
C/C++ code

#include <stdio.h>

int main(void)
{
double a = 3.0, b = 4.0, c;

double gou_gu(double x, double y)
{
……

[解决办法]
预定义...
[解决办法]
声明函数有什么问题吗,后面再定义不就可以了吗····
[解决办法]
探讨

一楼正解,楼主可能想知道的是下面的情况:
C/C++ code

#include <stdio.h>

int main(void)
{
double a = 3.0, b = 4.0, c;

double gou_gu(double x, double y)
{
return sqrt(x*x + y*y);
}

c = gou……

读书人网 >C语言

热点推荐