首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C语言详解(预编译)

前言 本篇文章将详细介绍编译过程中预编译的具体细节 在C语言的学习中部分人可能会忽视这一部分的学习,因为像VS这样相对强大的集成开发环境,我们在写好代码后只需要开始执行即可,所以部分人认为这一部分不值得我们花费时间去学习...其实不然,学习C语言预编译过程可以帮助我们更深入地了解C语言的编译过程和语法特性,提高代码编写的效率和质量,以及拓展编程技能 1、预定义符号 C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预编译阶段处理的...__FILE__:正在编译的源文件文件名 __LINE__:文件当前的行号 __DATE__:文件被编译的日期 __TIME__:文件被编译的时间 __STDC__:如果编译器遵循 ANSI C,其值为...#endif 或者 #pragma once 就可以避免头文件的重复引入。 总结 预编译是C语言编译过程的第一阶段,在预编译阶段可以对源代码进行预处理,如宏定义、头文件包含等。...通过学习预编译过程,可以更全面地理解C语言代码的编译过程。 预编译指令能够简化代码结构、提高代码的重用性和可维护性。学习预编译过程可以帮助程序员更好地利用预编译指令优化代码结构,提高代码的质量。

9410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C# 性能分析 反射 VS 配置文件 VS 预编

    本文分析在 C# 中使用反射和配置文件预编译做注入的性能,本文的数据是为预编译框架,开发高性能应用 - 课程 - 微软技术暨生态大会 2018 - walterlv提供 本文通过代码生成工具,使用C#...使用预编译的方法就像直接在代码里写 new Foo() 一样 而通过配置文件的方法实际也是反射的方法,只是少了反射整个程序集找到对应的类的过程 通过读取配置文件拿到了程序集需要注入的所有类的类名,然后通过反射的方法拿到对应的...Method Mean Error StdDev Median Scaled ScaledSD 预编译 28.20 us 0.3970 us 0.3713 us 28.16 us 1.00 0.00 配置文件...63.3132 us 126.4434 us 113.67 4.59 我通过设置了基线是预编译,可以看到通过配置文件创建的方式比预编译慢 75 倍,而通过反射特定的类是慢 100 多倍 其他测试请看...C# 直接创建多个类和使用反射创建类的性能 C# 程序内的类数量对程序启动的影响 整个测试的工程我打包放在下面,这个工程的创建代码很简单,我也直接放在下面 测试的工程 C# 性能分析 反射 VS 配置文件

    67340

    C语言】程序环境和预编

    1.预编译:gcc test.c -E -o test.i 我们在linux下写了一段代码,接下来我们就通过gcc编译器,将这个代码细分为3个步骤执行起来,直到产生目标文件test.o。...由图片便可以证明stdio.h这个文件预编译的时候,确实被展开在我们的test.c文件里面。...综上所述,在汇编阶段,编译器做的事情如下: 4.链接:符号表的合并(很重要) 前面编译(宏观)阶段生成的.o目标文件,例如add.o,test.o等目标文件Linux下有一种格式,叫做elf格式,...二、预处理(预编译)阶段展开讲解 1.C语言内置预定义符号 __FILE__ 进行编译的源文件 __LINE__ 文件当前的行号 __DATE__ 文件被编译的日期 __TIME__...我们的test.c文件预编译的时候,就会展开你刚刚包含的头文件,所以test.c文件一下子就多了5000多行代码,这给我们程序可带来了不小的开销啊。

    68320

    Moziila 文件结构概览(

    * 翻 :mzlogin#qq.com * 日 期:2012 年 2 月 22 日 * */ 源码目录概览 这个文档是一份为开发人员提供的 Mozilla 源码目录结构树的指南。...idl 包含 XPIDL(跨平台接口定义语言)接口文件。这些接口能极容易地广泛应用于 JS 脚本和 C 代码。XPIDL 文件拥有它们自己的迷你语言和处理工具。...nsprpub 包含跨平台 C 运行时库的代码。这个 C 运行时库包含基本非可视的 C 函数,有分配和释放内存的,获取时间和日期,读和写文件,处理线程的跨平台的字符串比较。...tools 包含 Linux-only Leaky tool 的 C 代码。Leaky 能帮忙探测内存泄漏和 XPCOM 引用计数的问题。...webshell 包含 C 接口,C 代码,Linux Shell 脚本和其它文件用于将 Mozilla 通过不同方式内嵌到各种不同平台的其它程序中(如 plug-in,ActiveX component

    62640

    Moziila 文件结构概览(

    * 翻 :mzlogin#qq.com * 日 期:2012 年 2 月 22 日 * */ 源码目录概览 这个文档是一份为开发人员提供的 Mozilla 源码目录结构树的指南。...idl 包含 XPIDL(跨平台接口定义语言)接口文件。这些接口能极容易地广泛应用于 JS 脚本和 C 代码。XPIDL 文件拥有它们自己的迷你语言和处理工具。...nsprpub 包含跨平台 C 运行时库的代码。这个 C 运行时库包含基本非可视的 C 函数,有分配和释放内存的,获取时间和日期,读和写文件,处理线程的跨平台的字符串比较。...tools 包含 Linux-only Leaky tool 的 C 代码。Leaky 能帮忙探测内存泄漏和 XPCOM 引用计数的问题。...webshell 包含 C 接口,C 代码,Linux Shell 脚本和其它文件用于将 Mozilla 通过不同方式内嵌到各种不同平台的其它程序中(如 plug-in,ActiveX component

    50330

    C语言翻译环境:预编译+编译+汇编+链接详解

    ⼀个C语言的项目中可能有多个.c文件⼀起构建,那多个.c文件如何生成可执行程序呢? 多个.c文件单独经过编译器,编译处理生成对应的目标文件(后缀为.obj)。...注:在Windows环境下的目标文件的后缀是.obj,Linux环境下目标文件的后缀是.o 多个目标文件和链接库⼀起经过链接器处理生成最终的可执行程序。...如果再把编译器展开成3个过程,那就变成了下面的过程: 预处理(预编译) 在预处理阶段,源文件和头文件会被处理成为.i为后缀的文件。...在(Linux) gcc 环境下想观察一下,对 test.c 文件预处理后的.i 文件,命令如下: gcc -E test.c -o test.i 预处理阶段主要处理那些源文件中#开始的预编译指令。...处理#include预编译指令,将包含的头文件的内容插入到该预编译指令的位置。这个过程是递归进行的,也就是说被包含的头文也可能包含其他文件

    45310

    ()Objective-C 类属性

    翻译自:Objective-C Class Properties 译者:Haley_Wong 由于Swift 3.0 出了太多令人兴奋的新特性,人们很容易忽略 Objective-C中的小改动。...苹果展示Objective-C 很可能是为了提高Swift互操作性(译者注:互操作性主要是指OC代码与Swift代码相互转换),但是仍然很欢迎开发者用Objective-C来完成工作。...在这篇文章中,我们就来看看Objective-C中新添加的类属性。...Objective-C 类属性 摘自 Xcode 8正式版中的说明: Objective-C now supports class properties, which interoperate with...生成的Swift接口 似乎,Objective-C 最近的这些改进只是为了提高与Swift的互操作性。Objective-C中新添加的类型属性对应的是Swift中类变量的用法。

    1.6K30

    4 种预编译头文件(PCH)削弱代码的方式

    如果使用得当,预编译头文件可以为您节省宝贵的编译时间。但如果使用不当,预编译头文件可能会隐藏源代码中的问题,而这些问题可能会在你尝试在另一个项目中重复使用部分源代码时才被发现。...本文是Objective-C 中的代码气味系列文章中的一篇。 预编译头文件的用途 发明预编译头文件的目的只有一个:"加快编译速度"。与反复解析相同的头文件相比,这些文件只需提前解析一次。速度非常重要!...对于预编译头文件来说也很方便。事实上,每个源文件都包含这些预编译的头文件,这也是前缀头文件的一个特点。 这就是事情开始出错的地方.........查找并修复缺失的 #import 由于 Xcode 将前缀头文件预编译头文件结合在一起的方式,省略 #import 语句是一种常见的 Objective-C 代码气味。...自 Jon Reid 的 4 Ways Precompiled Headers Cripple Your Code 侵删

    17710

    Cmake在windows支持预编译头文件(stdafx.h)

    ,而在linux和常规的makefile风格也打不一致,文件太多,不方便学习研究。      ...不够经过这段时间系统的研究,觉得cmake还是非常强大的,吃透之后它的确非常方便,比手工写makefile要简单的多,因此在linux使用cmake我觉得是非常合适的,不过在windows则相对要差一些...本文主要讲下在windows下使用cmake给项目添加预编译头文件功能,做过windows项目的同学都知道,windows下使用预编译头文件非常普遍,能加快编译速度,一些头文件交叉引用问题也能使用它来解决...为了复用预编译这个功能,我们把预编译相关的cmake功能编写成一个文件,比如叫msvcpch.cmake。...定义的宏 USE_MSVC_PCH(Proxy stdafx.h ${STDAFX_PCH_C}) endif () 好了,使用上面的方法就可以给vs的工程添加预编译头文件的支持了。

    2.7K50
    领券