C语言——调用没有函数原型的函数

2024-03-13

I found here http://opencbp.sourceforge.net/en_US.ISO8859-1/books/opencbook/func.prototypes.html如果函数位于函数调用之下,则函数原型在函数调用之前是必需的。

我在 gcc 编译器中检查了这种情况,它编译了没有函数原型的代码。

Example:

#include <stdio.h>

//int sum (int, int); -- it runs with this commented line

int main (void)
{
   int total;       
   total = sum (2, 3);
   printf ("Total is %d\n", total);        
   return 0;
}

int sum (int a, int b)
{
   return a + b;
}

有人可以解释一下这个问题吗?


当您在调用之前不提供函数原型时,编译器会假定该函数是在某个位置定义的,该函数将在链接阶段与其定义进行链接。默认返回类型假定为int并且对函数参数没有任何假设。这称为隐式声明。这意味着这里假设的函数签名是

int sum();

这里,空参数列表意味着函数sum接受固定但未知数量的参数,所有参数的类型都是未知的。与函数声明不同

int sum(void);

然而,在C++,上面两个声明是完全一样的。如果您的函数的返回类型不是int,那么假定的函数签名将不匹配,这将导致编译错误。事实上,这是一个错误C99 and C11。您应该始终在调用之前提供函数原型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言——调用没有函数原型的函数 的相关文章

随机推荐

  • 让 Django 以“不同的文件名”返回响应

    我有一个 Django 视图 它返回一个HttpResponse使用特殊的 MIME 类型使用户的浏览器 下载 文件而不是在浏览器中查看它 问题在于 保存响应的默认文件名是用户尝试访问的 URL 有没有办法在文件中包含默认文件名HttpRe
  • SWIG:%import 和 %include 之间的区别

    The SWIG 文档 http www swig org Doc2 0 Preprocessor html这两个指令解释如下 include 要将另一个文件包含到 SWIG 界面中 请使用 include指令 不同的是 include i
  • LINQ to NHibernate - .GroupBy().Skip().Take() 导致异常

    NHibernate 版本 3 3 1 4000 Query IQueryable
  • 想要测试空手道 API 中整数值应 >3 的断言

    json 响应是 值 0 23 我想在这里放置断言值应该小于 3 那么如何做到这一点 尝试了文档中的一些示例 但它们适用于此处的 jsonenter 代码的数组格式 场景 显示任何向 CS 发出 DB 请求所需的最短时间 该值是数据库访问性
  • Gem::installerror:“json”本机 gem 需要安装构建工具。请更新我们的路径以包含构建工具

    我使用 Railsinstaller 安装 Rails 但仍然收到此错误消息 基于与此相关的其他问题 看来 Railsinstaller 应该包含 devkit 并且这个问题不应该发生 我做错了什么 顺便说一句 这是当我更改 gemfile
  • 实体框架上下文应该放入using语句中吗?

    实体框架上下文对象实现 Dispose 方法 该方法 释放对象上下文使用的资源 它到底有什么作用 总是将其放入 using 语句中会是一件坏事吗 我见过它在有或没有 using 语句的情况下使用 我具体将在 WCF 服务方法中使用 EF 上
  • 中断boost::asio同步读取?

    我正在使用 asio 同步套接字通过 TCP 从后台线程读取数据 这被封装在 服务器 类中 但是 我希望线程在调用此类的析构函数时退出 问题是对任何读取函数的调用都会阻塞 因此线程不能轻易终止 Win32 中有一个 API 可以实现这一点
  • 鼠标仅悬停在文本上而不是整行上

    如何仅在文本而不是整行上提供鼠标悬停效果 我尝试使用 Position 但结果为空 下面是小提琴链接 ul li Task1 li li Task2 li li Task3 li li Task4 li li Task5 li li Tas
  • Eclipse + Tomcat - 直接从工作区提供 Web 应用程序

    将 Tomcat 配置为直接从工作区中的项目目录提供服务的理想方法是什么 related https stackoverflow com a 6378629 292614 我想要我的静态网络资源每当我对它们进行更改时即可立即可用 而无需将它
  • 设置一堆简短/友好的重定向 URL

    我需要设置数百个遵循以下格式的短重定向 URL http mysite com shorturl 这将重定向到 http mysite com index php id N 其中 N 是与该快捷方式对应的 ID 执行此操作的最佳方法是什么
  • 查找字符和数字之间可能的双射

    假设您有一个字符串 S 和列表 L 中的一个数字序列 使得 len S len L 检查是否可以找到字符串的字符与序列中的数字之间的双射以使每个字符与一个且仅一个数字匹配的最干净的方法是什么 例如 aabbcc 应与 115522 匹配 但
  • 为动态创建的 HTML 元素创建事件监听器

    在 downMouseBtn event 事件处理程序中 我创建了元素 div 我需要为创建的项目创建一个事件监听器 我怎样才能创建这个 添加哪部分代码呢 我需要处理动态生成的项目的 mouseClick 事件 import Compone
  • 字符串中回文子序列的总数

    问题是这样的 对于作为输入给出的每个字符串 您需要告诉它的回文子序列的数量 不一定是不同的 请注意 空字符串不是回文 例如 aab 的回文子序列是 a a b aa 该方法返回 4 我心中有寻找最长回文子序列的动态规划解决方案 因此尝试从中
  • Reactive Cocoa 5 和 ReactiveSwift 网络请求处理

    我试图弄清楚是否可以使用 ReactiveSwift 和 RAC5 来实现适合我需求的网络请求处理 在主题下从 RACSignal 迁移到 ReactiveSwift 或 RAC5 https stackoverflow com quest
  • 如何在没有结构体实例的情况下调用特征方法?

    如果我有一个结构体 其方法没有self作为参数 我可以通过调用该方法SomeStruct method 我似乎无法对从特征定义的方法做同样的事情 例如 trait SomeTrait fn one trait gt uint struct
  • 未知提供商 CookieStore

    我正在提供服务 我想使用 cookieStore 模块 它工作正常 但是当单元测试时它会中断 并给出错误 cookieStoreProvider 该服务如下所示 serviceModule factory filtersService ro
  • 如何将 --relative 与 git format-patch 一起使用?

    当我使用git diff relative HEAD HEAD 我得到了一些不错的补丁输出 我删除了它所在目录之外的路径 我开始使用git format patch我也想用 relative但没有看到任何选项 我怎样才能得到同样的效果 Th
  • 从空 Swift 数组中获取对象类型

    有没有办法从空数组中获取数组元素的实例 我需要dynamic属性 因为我使用了一些 KVC 方法NSObject import Foundation class BaseClass NSObject func myFunction doWo
  • 如何获取 Python 字符串中括号内的值? [复制]

    这个问题在这里已经有答案了 我有这样的事情 a 2 3 4 b 12 3 5 我只想要括号内的值 我使用正则表达式 它有效 但我的老师不允许 我怎样才能做到这一点 gt gt gt a 2 3 4 gt gt gt a a index 1
  • C语言——调用没有函数原型的函数

    I found here http opencbp sourceforge net en US ISO8859 1 books opencbook func prototypes html如果函数位于函数调用之下 则函数原型在函数调用之前是