`
anlx27
  • 浏览: 491397 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

从#if -#else- #endif 接触预编译

阅读更多
看代码时看到这么一段,
看着眼熟,可还是不太懂于是研究了一下,原来加了“#”的都是预编译的。由于看的是C代码,这里说说 C 的预编译,我也是现学现卖,还望各位朋友指正~QQ 458473928

在 C 语言中,并没有任何内在的机制来完成:
a  在编译时包含其他源文件,定义宏,
b  根据条件决定编译时是否包含某些代码.


这些工作,就需要使用预处理程序.

预处理--在编译之前,就对他们进行了处理

读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行响应的转换.预处理过程还会删除程 序中的注释和多余的空白字符. 预处理指令是以#号开头的代码行(#号必须是该行除了任何空白字符外的第一个字符).



#include   包含一个源代码文件
#define    定义宏
#undef     取消已定义的宏
#if        如果给定条件为真,则编译下面代码 , 给定条件不为真,当前条件为真,则编译下面代码

#ifdef     如果宏已经定义,则编译下面代码
#ifndef    如果宏没有定义,则编译下面代码
#elif      如果前面的
#endif     结束一个#if


举个例子(本例子摘抄的)
#include <stdio.h> //告诉编译器,要参与编译的文件
#define r 16 //告诉编译器,r就是16
#if r==16 //告诉编译器,r==16的时候,编译下面这段,否则编译else部分的内容
void p(int a)
{
printf("%x",a);
}
#else //告诉编译器,#if的另外一个部分
void p(int a)
{
printf("%d",a);
}
#endif //告诉编译器,#if的结束

void main()
{
p(32);
}
  • 大小: 888 Bytes
分享到:
评论

相关推荐

    编译预处理生成扩展C

    作用:对源程序编译之前做一些处理,生成扩展C源程序 种类 宏定义 #define 文件包含 #include 条件编译 #if--#else--#endif等

    C语言预处理命令之条件编译(_ifdef,_else,_endif,_if等)

    C语言预处理命令之条件编(_ifdef,_else,_endif,_if等)

    解析C#中#region与#if的作用

    #if #else #endif 作用:控制编译的代码 例如: #if(condition) 代码A #else 代码B #endif 如果condition为真,则程序编译的时候只编译代码A,如果condition为假,则程序编译的时候只编译代码B 所以, #if #...

    《C深度解析》第二章 C预编译——宏定义、条件编译、头文件包含、特殊预编译关键字

    (3)条件编译:#if、#else、#elif #endif、#ifdef和#ifndef、#if与defined、条件编译与配置文件(4)一些特殊的预编译关键字与实际应用:defined、#error、#line、#与##、#pragma (5)文件包含:是否只能包含.h...

    winzlog用VS2010重新编译的

    2、包含以下预编译指令: #ifdef _DEBUG #ifndef _WIN64 #pragma comment(lib, "zlog_vc100x86.debug.lib") #else #pragma comment(lib, "zlog_vc100x64.debug.lib") #endif #else #ifndef _WIN64 #pragma comment...

    thl_r16_tinav2.0_hm1375验证通过_增加打印设备ID_20170824_1447.7z

    if(vfe_sensor_register_check(dev,&dev-&gt;v4l2_dev,dev-&gt;ccm_cfg[input_num],&dev-&gt;dev_sensor[input_num],input_num) == NULL) { vfe_err("vfe sensor register check error at input_num = %d\n",input_num...

    ifdef-loader:用于JavaScriptTypeScript条件编译的Webpack加载器

    Webpack加载器,可直接从Webpack进行JavaScript或TypeScript条件编译( #if ... #elif ... #else ... #endif )。 有条件的编译指令写在///三斜杠注释中,这样它们就不会影响普通JavaScript或TypeScript解析。 ...

    简易的PHP框架 wshbinPHP

    * {endif} ( if结束标签 ) +----------------------------------------------------------------------------------------------------- + 其他 标签 在模板中的使用 +-------------------------------------------...

    C中的预编译宏定义.pdf

    在将一个C源程序转换为可执行程序的过程中, 编译预处理是最初的步骤. 这一步骤是由预处理器(preprocessor)来完成的. 在源流程序被编译器处理之前, 预处理器首先对源程序中的"宏(macro)"进行处理. ... ...

    C# #define条件编译详解

    C#的预处理器指令从来不会转化为可执行代码的命令,但是会影响编译过程的各个方面,常用的预处理器指令有#define、#undef、#if,#elif,#else和#endif等等,下面介绍C#中使用#define进行条件编译的实例。 C#中条件编译...

    `ifdef、`else 和`endif

    这些编译指令用于条件编译,如下所示:`ifdef WINDOWSparameter WORD_SIZE = 16`elseparameter WORD_SIZE = 32`endif 在编译过程中,如果已定义了名字为WINDOWS的文本宏,就选择第一种参数声明,否则选择第二种参数...

    C语言源代码格式化小文版0.33

    速度比“C语言源码格式化 ...我在它的基础上增加了对条件编译的判断:#ifdef/#else/#endif #ifndef/#else/#endif #if/#else/#endif。 且解决了对switch/case的判断。 if/else for do/while的识别在以后的版本中改进。

    图像处理的 相关资料

    #else指令用于某个#if指令之后,当前面的#if指令的条件不为真时,就编译#else后面的代码。#endif指令将中指上面的条件块。 #define DEBUG main() { #ifdef DEBUG printf(Debugging\n); #else printf(Not ...

    r40_tinav2.1_最终验证通过_使用CB-S来验证OV5640有横条纹fpscamera+SPI2.0成功_20171114_1443没有外层目录.7z

    else if (ret == 0) { hv_err("select timeout\n"); pthread_mutex_unlock(mutex); return 0; } memset(&buf;, 0, sizeof(struct v4l2_buffer)); buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; buf.memory = V4...

    小型售货机

    #ifndef Goodclass_h //条件编译 #define Goodclass_h #include using namespace std; class Data //定义数据类 { protected://与私有成员性质相似,唯一的差异表现在派生类中 int Goodnum; //定义货物编号 int ...

    C#中的预处理器指令详解

    2. #if、#elif、#else 和#endif 3. #warning 和 #error 4. #region 和#endregion 5. #line 6. #pragma  C#中有许多名为“预处理器指令”的命令。这些命令从来不会转化为可执行代码中的命令,但会影响编译过程的各个...

    preprocessor-loader:将令人敬畏的“条件编译”带入Webpack,以及更多

    将令人敬畏的“条件编译”功能带到Webpack等等。 选项 debug _ directives params verbose 内置指令 #!if / #!else / #!elseif / #!endif #!debug 注意事项 带代码的内联指令 林亭 执照 为什么 借助webpack...

    au3反编译源码

    au3反编译源码 myAut2Exe - The Open Source AutoIT Script Decompiler 2.9 ======================================================== *New* full support for AutoIT v3.2.6++ :) ... mmh here's what I ...

    EasyHook-2.7.6270.0-StaticLib

    EasyHook最新静态库,包含NetFX3.5、NetFX4.0下面的已经编译好的动态库,同时包含了NetFX4.0下自己编译的静态库。静态库的用法大致如下: 1、头文件包含如下 #define _STATIC_LIB_ // 声明 引用静态库 #include #...

    《C语言学习笔记》宏和预处理1

    预处理器和预处理指令预处理是在编译前所作的一项工作,一般预处理命令行都是以#开头的。条件编译预处理器条件指令(#if、#else、#elif、#endif 等)

Global site tag (gtag.js) - Google Analytics