像#include 这样的预处理器指令只能放在程序代码的顶部吗?

2024-04-05

我已经用过#pragma函数内的指令没有错误或警告(特别是#pragma pack()).但是下面的代码显示了警告incompatible implicit declaration of built-in function 'printf'|:

int main(void)
{
    printf("Trial");
}

#include<stdio.h>

此外,这是我所拥有的一本书的摘录。作者对 SO 有不好的评论,尤其是他慷慨地使用了void main(),但我仍然觉得没有一个作者可以that无缘无故地提出以下主张是不好的:

每个预处理器指令均以 # 开头 象征。这些指令可以放置在程序中的任何位置,但是 最常放置在程序的开头、之前 第一个函数定义。

那么你能告诉我是否强制使用一些预处理器指令,例如#include在程序的顶部,而其他人则喜欢#pragma可以在程序的任何地方使用吗?

Edit After OUAH的评论我尝试了以下操作,但它没有发出警告,它给出了一大堆errors.LOL.

int main(void)
{
    #include<stdio.h>
    printf("Trial");
}

这样想吧。包含文件的内容只需插入到文件中 #include 指令出现的位置即可。生成的代码在语法上对于您所使用的编程语言来说必须是正确的。

考虑以下文件:

int a;

int foo();

int main()
#include "myheader.h"

int foo()
{
    return 0;
}

文件 myheader.h 包含:

{
    return foo();
}

预处理器处理完 #include 指令后,编译器将看到的代码是:

int a;

int foo();

int main()
{
    return foo();
}

int foo()
{
    return 0;
}

这是有效的 C 语法。不建议这样使用 #include 指令,但它可以让您了解它的含义。如果 myheader.h 文件具有以下内容:

this is some garbage
which is not proper C

那么生成的代码将是:

int a;

int foo();

int main()
this is some garbage
which is not proper C

int foo()
{
    return 0;
}

您可以在文件中的任何位置使用#include。它会导致此时按字面包含所包含文件的内容。您在代码中收到 printf() 未声明消息的原因是 C 要求在使用之前声明一个函数,而 stdio.h 具有该声明。这就是为什么在使用之前需要它。为什么它不能包含在后一个示例中的 main() 中,是因为在包含(扩展)时,它会导致语法错误的 C 代码。

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

像#include 这样的预处理器指令只能放在程序代码的顶部吗? 的相关文章

随机推荐

  • AngularJS:为 ngStyle 应用过滤器

    祝大家有美好的一天 我在理解 AngularJS 时遇到问题 我可以在 ngStyle 指令中使用自定义过滤器吗 为什么当我更改输入中的值时 它不能同时更改跨度标记的不透明度 但它会更改标记中的值 在不直接使用控制器作用域的情况下如何实现这
  • 未定义的方法“full_title”[重复]

    这个问题在这里已经有答案了 我收到以下错误 undefined method full title 在这一行 在我的布局文件上
  • 如何在 Spyder/IPython/matplotlib 中再次获得交互式绘图?

    我从 Python x y 2 7 2 3 升级到2 7 6 0 http code google com p pythonxy wiki Downloads在 Windows 7 中 很高兴看到我终于可以输入function name 并
  • Facebook Graph API 不返回事件图片

    编辑 看来 Facebook 终于修复了这个错误 你能帮我理解为什么会发生这种情况吗 这是一个公开活动 附有图片 https www facebook com events 282054218538223 https www faceboo
  • 如何在窗口模式下禁用 VS Code 小地图?

    我在 Visual Studio Code 中执行了以下操作 settings json gt editor minimap enabled true 并排打开 2ed 文件 窗口模式 小地图存在于两个窗口中 这占用了太多空间 但当我在单个
  • 如何实现pdf编辑器

    I am working on an application and I am using pdfkit which I should have the ability to read pdf files and edit them I f
  • 如何在 ElasticSearch 中从形状获取交点

    我已经存储了一条路线ElasticSearch作为多边形 现在我有一个圆 一个点和一个半径 我可以检查圆点是否与多边形相交 下面是我使用的代码 问题 如何获取与圆相交的路线上的点 public Boolean isMatchingDoc L
  • 省略 Doctrine 生成的 SQL 的鉴别器部分

    假设以下情况AbstractPage model ORM Entity ORM Table name page ORM InheritanceType SINGLE TABLE ORM DiscriminatorColumn name ty
  • 在单个查询中从 mongo 中删除多个文档

    我有一个要删除的 mongo id 列表 目前我正在这样做 inactive users gt list of inactive users for item in inactive users db users remove id ite
  • VHDL (Xilinx) 中的错误:无法链接设计

    为什么我在 VHDL 中遇到错误 另外 有时 无法执行流程 因为之前的流程失败了 非常感谢 永久解决方案1 在win 10上 找出 installation directory Xilinx 14 x ISE DS ISE gnu MinG
  • 为什么会有 CL_DEVICE_MAX_WORK_GROUP_SIZE?

    我试图了解 OpenCL 设备 例如 GPU 的体系结构 但我不明白为什么本地工作组中的工作项数量有明确的限制 即常量 CL DEVICE MAX WORK GROUP SIZE 在我看来 这应该由编译器处理 即 如果 为简单起见 一维 内
  • 云平台- sudo:无法解析主机[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在 Amazon EC2 和 openstack 上使用 Linux 作为基于云的服务器 当尝试运行时 sudo chhown ubun
  • 什么时候应该在汇编中使用显式对齐指令?

    我花了一些时间进行汇编编程 特别是 Gas 最近我了解了对齐指令 我想我已经了解了最基本的知识 但我想更深入地了解其本质以及何时使用对齐 例如 我想知道一个简单的 C switch 语句的汇编代码 我知道在某些情况下switch语句是基于跳
  • 如何使用 Node.js 中的 WebSocket (websockets/ws) 库获取客户端 IP 地址?

    我在客户端对象上找不到客户端 IP 参数 经过一番尝试找出客户端 网络浏览器 IP 地址是哪一个提供的 答案是 ws socket remoteAddress 或者如果您有权访问req via wss on connection ws re
  • 无法登录 Openshift

    我已经尝试通过 Openshift 连接到我的应用程序好几天了 但仍然没有成功 我现在不确定该去哪个论坛 因为我没有在任何地方获得帮助 1 我将通过终端并运行sudo rhc setup 我之所以使用sudo是因为没有它就无法进行下一步 2
  • 使用 git diff,如何获取添加和修改的行号?

    假设我有一个文本文件 alex bob matrix will be removed git repo 我已将其更新为 alex new line here another new line bob matrix git 在这里 我添加了行
  • wget ssl 警报握手失败

    我尝试从 https 站点下载文件并不断收到以下错误 OpenSSL error 14077410 SSL routines SSL23 GET SERVER HELLO sslv3 alert handshake failure Unab
  • 列出AWS S3存储桶中的所有对象

    我试图弄清楚如何在 Swift 中列出 AWS S3 存储桶中的所有对象 我似乎无法在互联网上的任何地方找到信息 但也许我看起来不够努力 如果有人可以向我推荐允许我执行此操作的代码 那就太好了 不知道你是否还需要它 但你可以 let cre
  • 如何在delphi 7中将unicode字符转换为ascii代码?

    是的 我们正在谈论 ASCII 代码 抱歉 我不是这里的 Delphi 开发人员 对于 Delphi 7 我会得到Mike Lischke 的免费 Unicode 库 http www soft gems net index php lib
  • 像#include 这样的预处理器指令只能放在程序代码的顶部吗?

    我已经用过 pragma函数内的指令没有错误或警告 特别是 pragma pack 但是下面的代码显示了警告incompatible implicit declaration of built in function printf int