像#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 这样的预处理器指令只能放在程序代码的顶部吗? 的相关文章

  • DispatcherTimer 未按时执行

    我正在使用 c 中的 DispatchTimer 编写一个时钟应用程序 但由于某些原因 我的时钟似乎时不时地跳过 1 秒 例如 52 秒 gt 54 秒 跳过 53 秒 在我看来 计时器并不是每秒都执行一次 DispatcherTimer
  • 扫描文本文件时如何跳过行?

    我想扫描一个文件并在阅读之前跳过一行文本 我试过 fscanf pointer n struct test i j 但这个语法只是从第一行开始 我可以使用 scanf 使用以下指令跳过行 fscanf config file n n 格式字
  • 必须打开存储才能执行此操作 - System.IO.Packaging.Package

    我正在使用 System IO Packaing Package 类来压缩文件 我的应用程序的多个实例可以同时运行 并读取和保存文件 当处理小文件时 一切似乎都很好 但是当涉及大文件时 如果应用程序的两个实例同时保存 我会收到一个异常 消息
  • C# 中的协变和逆变

    首先我要说的是 我是一名正在学习 C 编程的 Java 开发人员 因此 我会将我所知道的与我正在学习的进行比较 我已经使用 C 泛型几个小时了 我已经能够在 C 中重现我在 Java 中知道的相同内容 除了几个使用协变和逆变的示例 我正在读
  • Android NDK C++“wstring”支持

    我有用 C 编写的源代码 lib 现在我想在 Android NDK 项目 NDK 6 中编译并使用相同的源代码 lib 我能够编译大多数 C 文件 除了基于 std wstring 的功能 在 Application mk 中 当我指定时
  • 如何将pdf页面设置设置为打印属性对话框?

    大家好 我想知道如何设置 pdf 页面设置到打印属性对话框 例如 如果我的 PDF 页面设置为横向 则布局会自动显示横向而不是纵向 如果我的 PDF 页面设置为纵向 则布局会自动显示纵向 我在这个主题上做了很多研发 但没有找到任何满意的链接
  • F10键没被抓住

    I have a Windows Form and there overriden ProcessCmdKey However this works with all of the F Keys except for F10 I am tr
  • 使用反射获取基类的受保护属性值

    I would like to know if it is possible to access the value of the ConfigurationId property which is located in the base
  • 特定设备的不同字体大小

    我目前正在开发通用应用程序 我需要分别处理移动设备和桌面的文本框字体大小 我找到了一些方法 但都不能解决问题 使用 VisualStateManager 和 StateTrigger 为例
  • .net Framework (.net 4.0) 中定义 Base 3 数字的类

    我正在寻找一些可以用来定义 3 基数 三进制数 的类 有什么我可以在 net 框架中使用的东西或者我需要写一些东西吗 谢谢你的帮助 您可以使用解析Convert ToInt32 s base http msdn microsoft com
  • 用 C# 制作 Vista 风格的应用程序

    我正在运行 Windows Vista 并且希望外观看起来像常规 Vista 程序 有没有关于如何构建 Vista 风格应用程序的真正好的教程 文章 我还想学习如何使用本机代码并将其转换为 C 如this http bartdesmet n
  • 使用 openssl 检查服务器安全协议

    我有一个框架应用程序 它根据使用方式连接到不同的服务器 对于 https 连接 使用 openssl 我的问题是 我需要知道我连接的服务器是否使用 SSL 还是 TLS 以便我可以创建正确的 SSL 上下文 目前 如果我使用错误的上下文尝试
  • 使用scanf()时如何区分整数和字符

    我只是使用该功能scanf 代码如下 scanf d a printf d a 当我输入1时 它会像我想要的那样打印1 但即使我输入 1a 它也会像以前一样打印 1 当用户输入非整数时 例如 2 3 12ab 1 a 我想向用户显示 输入整
  • 为什么重载方法在 ref 仅符合 CLS 方面有所不同

    公共语言规范对方法重载非常严格 仅允许根据其参数的数量和类型来重载方法 如果是泛型方法 则根据其泛型参数的数量进行重载 根据 csc 为什么此代码符合 CLS 无 CS3006 警告 using System assembly CLSCom
  • 如何不在类中实现接口的功能?

    面试时面试官问了我以下问题 但我不知道这个问题的答案是什么 请帮忙 如果我不想 我必须做什么 在我的类中实现一个函数 在接口中声明为 由我班实施 Edited 我正在使用 NET 和 C 如果有人可以提供 C 示例代码示例 那就太好了 Th
  • 展开路径中具有环境变量的文件名

    最好的扩张方式是什么 MyPath filename txt to home user filename txt or MyPath filename txt to c Documents and settings user filenam
  • 你能解释一下这个C++删除问题吗?

    我有以下代码 std string F WideString ws GetMyWideString std string ret StringUtils ConvertWideStringToUTF8 ws ret return ret W
  • 为什么C语言中可以使用多个分号?

    在 C 中我可以执行以下操作 int main printf HELLO WORLD 它有效 这是为什么 我个人的想法 分号是一个 NO OPERATION 来自维基百科 指示符 拥有一大串分号与拥有一个分号并告诉 C 语句已结束具有相同的
  • 是否有任何不使用公共虚拟方法的正当理由? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 是否有任何不使用公共虚拟方法的正当理由 我在某处读到我们应该避免使用公共虚拟方法 但我想向专家确认这是否是有效的声明 对于良好且稳定的 API
  • 如何强制执行特定的 UserControl 设计

    我正在编写一个基本用户控件 它将由一堆其他用户控件继承 我需要对所有这些后代控件强制执行某种设计 例如 顶部必须有几个按钮以及一个或两个标签 后代用户控件区域的其余部分可以自由放置任何内容 最初 我认为我可以将一个面板放到 Base Use

随机推荐

  • 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