微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在另一个函数内调用一个函数main() 除外

如何解决在另一个函数内调用一个函数main() 除外

让我们假设除了 main() 之外我还有 2 个函数,分别是 func1() 和 func2()。我可以在 func(2) 中调用 func1() 而不先声明它吗?或者我应该使用指向另一个函数的指针并将其作为参数传递?提前致谢。

解决方法

_"Is it possible for me to call func1() in func(2) without declaring it first?"_

这取决于编译器,但通常这行不通。 (请参阅答案底部的排除示例。)

说明的一些场景:

场景 1:通常不会工作,因为函数在声明之前被引用

int main(void)
{
    int ret = func1();
    return 0;
}

int func1(void)
{
    return 1;
}

int func2(void)
{
    return func1();
}

结果:

9、15 错误:隐式声明 函数“func1”无效 在 C99 中。确保包含函数原型。

场景 2:当所有必需的定义按顺序出现时,这将毫无问题地编译和运行:

char func1(void)
{
    return 1;
}

char func2(void)
{
     return func1();
}

int main(void)
{
    char ret = func1();
    ret = func2();
    return 0;
}

结果:

编译和运行没有问题,因为这两个函数都是在调用之前定义func2() 都从 main() {{1} } 调用自 func1())

场景 3:最好的方法始终是使用原型在调用函数之前在同一文件中或在使用它们的任何源文件中#included 的头文件中预先声明函数。这清除了任何潜在问题,特别是对于那些继承了维护代码的问题:

func1

关于您的评论:

“...我书中的一个陈述引起了混乱,我认为这可能与书中和我使用的 C 编译器版本不同有关。”

可能是:根据下面的评论,一些现代编译器(例如 int func1(void); int func2(void); int main(void) { int ret = func1(); return 0; } int func1(void) { return 1; } int func2(void) { return func1(); } )支持预标准 C 函数定义,因此如果函数符合 default function definition,则可以毫无问题地编译场景 1 和 2;例如:

gcc
,

这是你的做法:

    void func2(int code);     // forward declaration

    void func1(const char* str)
    {
        func2(str[0]);        // a call to a declared function
    }

    void func2(int code)      // the callee
    {
        printf("code: %d\n",code);
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。