精华内容
下载资源
问答
  • C语言 #if 0,#if 1,#else,#endif

    千次阅读 2018-08-23 10:14:28
    在C语言中时常会用到#if 0,#if 1,#else,#endif语句,语句如下所示: #if 0  code1 #else  code2 #endif   此时code1的语句被注释掉了,永远没有办法执行,而code2是被编译的;如果将#if...

    https://blog.csdn.net/wwwsssZheRen/article/details/79077141

     

    在C语言中时常会用到#if 0,#if 1,#else,#endif语句,语句如下所示:

    #if 0

        code1

    #else

        code2

    #endif

     

    此时code1的语句被注释掉了,永远没有办法执行,而code2是被编译的;如果将#if 0变为#if 1,code1被编译,而code2永远没有办法被执行。

     

    测试程序一:

    #include <stdio.h>
    int main()
    {
    //#if 0
    //	printf("#if 0\n");
    #if 1
    	printf("#if 1\n");
    #else
    	printf("#else\n");
    #endif 
        return 0;
    } 

    效果一如下:

    #if 1

     

     

    测试程序二:

    #include <stdio.h>
    int main()
    {
    #if 0
    	printf("#if 0\n");
    //#if 1
    //	printf("#if 1\n");
    #else
    	printf("#else\n");
    #endif 
        return 0;
    } 

    效果二如下:

    #else

    展开全文
  • #if #ifdef #if defined 等几种常用的预处理指令的区别 在写shader时经常会出现一些预编译指令比如 #if #ifdef #if defined 等,有的时候会感到困惑,所以决定仔细查一下具体的使用方法,并做一个简单的测试。 #...

    在写shader时经常会出现一些预编译指令比如 #if #ifdef #if defined 等,有的时候会感到困惑,所以决定仔细查一下具体的使用方法,并做一个简单的测试。

    #define

    #define 指令用于定义一个宏或者常量
    #define 有两种常用的格式:

    1. #define identifier token-string 定义一个宏,在预编译时会把所有identifier替换成token-string,可以用更容易理解的名称去代替一个常量,例如:#define PI 3.1415926
    2. #define identifier( argument0, …, argumentN-1 ) token-string 定义一个类似函数一样的宏,例如:#define AREA(area, w, h) (area = w*h);
    // #define 的使用 //
    #define SOME_MACRO
    #define PI 3.141593
    

    定义宏时使用第一种方式,当没有指定 token-string 时,需要注意的两点是:

    1. 这个identifier依然是被定义了的,且可以使用#if defined 或 #ifdef 检测到的
    2. 所有identifier字符都会被移除,或者理解为所有identifier的地方都被替换成空字符串。

    详细信息可以参考 #define文档

    #if

    #if 是一个预处理指令,用来控制源文件中哪一部分会被编译。
    格式是: #if condition
    简单来说就是 #if 后面的条件语句(condition)如果执行结果不为0,则该#if语句块内的代码会被编译,否则就不会被编译。
    #elif 和 #else 可以类比为常规的用于判断条件的关键字 else if 和 else,区别是前面加了个#符号,用以表明该指令是在预处理阶段执行,而不是运行时执行。最后,在所有判断结束后需要用 #endif 来作为结尾,用于确定预处理语句的作用范围。

    // #if 的使用 //
    #define SOME_MACRO 0
    #if SOME_MACRO
        return float4(1,1,1,1);
    #else
        return float4(0,0,0,1);
    #endif
    

    以上代码结果返回黑色


    // #if 的使用 //
    #define SOME_MACRO
    #if SOME_MACRO
        return float4(1,1,1,1);
    #else
        return float4(0,0,0,1);
    #endif
    

    以上代码会报错: invalid or unsupported integer constant expression

    详细信息可以参考 #if文档


    #ifdef

    #ifdef 用于判断一个常量或者宏是否被定义
    格式是: #ifdef identifier
    identifier是一个宏或者常量,可以通过#define指令来定义,如果identifier被定义过,则#ifdef 语句块内的代码会被编译,否则不会被编译。
    #ifdef 只是判断一个常量或者宏是否被定义,不可以用于表达式判断,但是#if可以,例如:

    #define CONST_VALUE 3
    #if CONST_VALUE > 1
        return float4(1,1,1,1);
    #else 
        return float4(0,0,0,1);
    #endif
    
    #ifdef CONST_VALUE > 1      // 这样写会报错 //
    

    hlsl文档上的说法是#ifdef这种写法只是为了兼容以往版本,建议使用defined来判断,即使用 #if defined(MACRO) 这种形式,接下来就会说到。

    These directives are provided only for compatibility with previous versions of the language. The use of the defined operator with the #if directive is preferred.
    

    详细信息可以参考 #ifdef文档


    #if defined

    这是文档里更推荐的一种写法
    #if defined 和 #ifdef 都可以用来判断一个宏是否被定义,#if !defined 等同于 #ifndef。

    #define SOME_MACRO
    
    // #if defined 的使用 //
    #if defined(SOME_MACRO)
        // do something //
    #elif defined(OTHER_MACRO)
        // do something else //
    #endif
    
    // #ifdef 的使用 //
    #ifdef SOME_MACRO
        // do something //
    #endif
    
    #ifdef OTHER_MACRO
        // do something else //
    #endif
    


    总结

    1. 如果是根据一个宏是否被定义来决定一段代码要不要执行,建议使用 #if defined(MACRO) 方式
    2. 如果是根据一个表达式的值是否为0来决定一段代码要不要执行,建议使用 #if condition 方式
    3. #ifdef 用于判断宏或者常量是否被定义,不用于判断表达式,#if 可以用于判断表达式


    参考链接:

    https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-appendix-preprocessor

    https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-appendix-pre-define

    https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-appendix-pre-if

    https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-appendix-pre-ifdef

    https://stackoverflow.com/questions/3802988/difference-between-preprocessor-directives-if-and-ifdef


    测试工程地址:

    https://github.com/JasonTheCoderMichael/Preprocessor-Directives

    展开全文
  • C/C++中常见的#ifif、#ifdef、#if define等区别

    万次阅读 多人点赞 2018-07-14 21:35:10
    #ifif条件编译是C语言中预处理部分的内容,它是编译器编译代码时最先处理的部分,条件编译里面有判断语句,比如 #if 、#else 、#elif 及 #endif它的意思是如果宏条件符合,编译器就编译这段代码,否则,编译器就...

    #if 与 if

    条件编译是C语言中预处理部分的内容,它是编译器编译代码时最先处理的部分,

    条件编译里面有判断语句,比如 #if 、#else 、#elif 及 #endif

    它的意思是如果宏条件符合,编译器就编译这段代码,否则,编译器就忽略这段代码而不编译,如

    1. #define A 0 //把A定义为0
    2. #if (A > 1)
    3. printf( "A > 1"); //编译器没有编译该语句,该语句不生成汇编代码
    4. #elif (A == 1)
    5. printf( "A == 1"); //编译器没有编译该语句,该语句不生成汇编代码
    6. #else
    7. printf( "A < 1"); //编译器编译了这段代码,且生成了汇编代码,执行该语句
    8. #endif

    而 if 语句则不然,if 是 C 语言中的关键字,它根据表达式的计算结果来觉定执行那个语句,它里面的每个分支都编译了的, 如

    1. #define A 0
    2. if (A > 1)
    3. printf( "A > 1"); //编译器编译该语句,但因为A == 0 未执行
    4. else if(A == 1)
    5. printf( "A == 1"); //编译器编译该语句,但因为A == 0 未执行
    6. else
    7. printf( "A < 1"); //编译器编译该语句,因为A == 0 故执行

    作为一个编译“开关”(常用来注释代码),比如:

    1. #if(条件满足)
    2. 执行代码 1
    3. #else
    4. 执行代码 2
    5. #endif

    假如编译时,确实满足条件(结果非0时),则生成的程序文件(.exe文件)中不会有执行代码2的。如果用普通if语句,生成的程序文件就会有执行代码2,这个区别看看生成文件大小就可以知道。如果你的条件在程序编译前就已经确定了,那就用#if;如果条件需要在程序运行过程中才能判断,则用if。

    所以 简单地讲,条件编译是根据 宏条件 选择性地编译语句,它是编译器在编译代码时完成的;

    条件语句是根据条件表达式选择性地执行语句,它是在程序运行时进行的。

    #if的使用说明

    #if的后面接的是表达式

    1. #if ( MAX == 10 ) || ( MAX == 20 )
    2. code ...
    3. #endif

    它的作用是:如果(MAX==10)||(MAX==20)成立,那么编译器就会把其中的#if 与 #endif之间的代码编译进去(注意:是编译进去,不是执行!!)

    #if defined的使用

    #if后面接的是一个宏。

    1. #if defined (x)
    2. ...code...
    3. #endif

    这个#if defined它不管里面的“x”的逻辑是“真”还是“假”它只管这个程序的前面的宏定义里面有没有定义“x”这个宏,如果定义了x这个宏,那么,编译器会编译中间的…code…否则不直接忽视中间的…code…代码。

    另外 #if defined(x)也可以取反,也就用 #if !defined(x)

    #ifdef的使用

    #ifdef的使用和#if defined()的用法一致 
    #ifndef又和#if !defined()的用法一致。

    最后强调两点: 
    第一:这几个宏定义只是决定代码块是否被编译! 
    第二:别忘了#endif

    展开全文
  • #if defined和#if !defined的含义

    千次阅读 2020-07-28 14:32:23
    对于大型项目一般要用到许多宏定义,那么我们有时考虑定义某个常量时,我们就必须返回检查原来此常量是否定义,但这样做很麻烦.if defined宏正是为这种情况提供了解决方案。 #define .... #define a 100 此时,我们要...

    对于大型项目一般要用到许多宏定义,那么我们有时考虑定义某个常量时,我们就必须返回检查原来此常量是否定义,但这样做很麻烦.if defined宏正是为这种情况提供了解决方案。

    #define .... 
    #define a 100 
    此时,我们要检查a是否定义,或者我们要给a一个不同的值,就加入如下句子 
    #if defined a 
    #undef a 
    #define a 200 
    #endif 
    上述语句检验a是否被定义,如果被定义,则用#undef语句解除定义,并重新定义a为200 

    同样,检验a是否定义: 
    #ifndef a    //如果a没有被定义 
    #define a 100 
    #endif 

    以上所用的宏中:#undef为解除定义,#ifndef是if not defined的缩写,即如果没有定义。 


    #if defined XXX_XXX 
    #endif 
    是条件编译,是根据你是否定义了XXX_XXX这个宏,而使用不同的代码。 

    一般.h文件里最外层的 
    #if !defined XXX_XXX 
    #define XXX_XXX 
    #endif 
    是为了防止这个.h头文件被重复include。 

    #error XXXX 
    是用来产生编译时错误信息XXXX的,一般用在预处理过程中; 
    例子: 
    #if !defined(__cplusplus) 
    #error C++ compiler required. 
    #endif 

    defined可以使用逻辑运算符进行组合:

    1. #define CONST_PI (3.1415926)

    2. #define CONST_R (20)

    3. #if defined(CONST_R ) && defined(CONST_PI)

    4. #define CONST_AREA (CONST_R*CONST_PI*CONST_R)

    5. #endif

    展开全文
  • #if #endif作用

    千次阅读 2019-11-25 19:46:27
    #if 0 代码 #endif 即代表此程序不运行 #include“stdio.h” int main() { int a=1; #if 0 程序段 #endif a++; } int main() { int a=11; #if 1 程序段 这里写自定义目录标题欢迎使用Markdown编辑器新的改变...
  • #if的使用说明

    千次阅读 2020-11-18 13:57:26
    #if的后面接的是表达式 #if (MAX10)||(MAX20) code… #endif 它的作用是:如果(MAX10)||(MAX20)成立,那么编译器就会把其中的#if 与 #endif之间的代码编译进去(注意:是编译进去,不是执行!!) #if defined的使用...
  • #ifdef #if defined #ifndef和#if !defined区别

    千次阅读 2017-09-30 10:36:32
    !! 首先,让我们先从头文件开始,在很多头文件里,...而要组成复杂的判别条件,用#if defined()就灵活方便了,比如:#if defined(AAA) && (BBB >= 10) 如果改用#ifdef则没法表示条件BBB>=10了。
  • #if, #elif, #else, #endif 使用

    千次阅读 2018-04-22 09:53:03
    有些程序在调试、兼容性、平台移植等情况下可能想要通过简单地设置一些参数就生成一个不同的软件,这当然可以通过变量设置,...(一)条件编译方法 条件编译是通过预编译指令来实现的,主要方法有:1、#if, #elif, ...
  • 在C语言中时常会用到#if 0,#if 1,#else,#endif语句。 #if 1 需要编译器编译以下内容; #if 0 编译器不要编译以下内容; 用法示例说明: #if 0 code1 #else code2 #endif 【解析】:此时code1的语句被...
  • 转自:https://blog.csdn.net/qq_33658067/article/details/79443014本文主要介绍c语言中条件编译相关的预编译指令,包括 #define、#undef、#ifdef、#ifndef、#if、#elif、#else、#endif、defined。#define 定义一...
  • #if...#endif用法总结

    千次阅读 2019-11-18 13:10:49
    2. #if…#endif是C++种的条件编译预处理命令 有两种格式: 1: #ifdef 标示符  程序段1 #else  程序段2 #endif 表示:如果标示符已经被#define命令定义过,则编译程序段1,否则编译程序段2...
  • 编译预处理中的条件命令, 相当于C语法中的if语句,如果if后判断为真则执行if后面的代码块 2、 #ifdef 判断某个宏是否被定义, 若已定义, 执行随后的语句-注意只会判断该宏是否定义,而不会具体判断语句的正确性 3、...
  • C语言注释有三种方法 ...3)#if 0 或 #if 1注释: 当屏蔽掉大块代码时,使用"#if 0"比使用"/**/"要好。(因为用"/**/"做大段的注释时,需要防止被注释掉的代码段中有嵌...
  • #if/#endif的用法

    万次阅读 2019-03-23 21:38:17
    话不多说请看代码` #include<stdio.h> #include<...#if 0 int a = 0; int b = 0; int min = 0; int i = 0; int max = 0; printf("请输入两个数"); scanf_s("%d%d", &a,&b); for...
  • You can use the #ifdef and #ifndef directives anywhere #if can be used. The #ifdef identifier statement is equivalent to #if 1 when identifier has been defined. It’s equivalent to #if 0 when ...
  • 【C基础】#ifif、#ifdef、#if defined之间的区别

    万次阅读 多人点赞 2018-01-23 13:48:03
    #if vs. if 条件编译是C语言中预处理部分的内容,它是编译器编译代码时最先处理的部分, 条件编译里面有判断语句,比如 #if 、#else 、#elif 及 #endif 它的意思是如果宏条件符合,编译器就编译这段代码,否则,...
  • #if debug

    千次阅读 2019-07-26 15:40:03
    #if DEBUG UserID = "abc@test.com"; Password = "123456"; #endif 代码只会在Debug模式执行Release模式不会执行在生成的时候也直接忽略 一般用于测试时赋予默认值 或登录时省了输入用户名密码操作 ...
  • #if 0 /#if 1用法介绍(屏蔽代码块)

    万次阅读 多人点赞 2018-02-22 20:31:07
    #if 0"比使用"/**/"要好,因为用"/**/"做大段的注释要防止被注释掉的代码中有嵌套的"/**/",这会导致注释掉的代码区域不是你想要的范围,当被注释掉的代码很大时容易出现这种情况...
  • c语言 出现的#if 0 表示什么?

    万次阅读 多人点赞 2019-09-05 11:34:05
    #if 后面的参数为真(非0)则执行#if 后面的模块 #if 后面的参数为假,则不执行#if 后面的模块 此指令多用在调试的时候,有段代码自己不想删除,怕后面用到所以用#if 0来暂时注释掉,如果想用的话就用#if 1来开启; ...
  • 用#if还有一个好处,如果你把宏名记错了,把MY_PRINTF_EN定义成了MY_PRINT_EN,那么你用#ifdef MY_PRINTF_EN或者#if defined(MY_PRINTF_EN)控制的代码就不能被编译,查起来又不好查,用#if MY_PRINTF_EN ==1控制就很...
  • freemarker #if 判断

    万次阅读 2019-01-23 15:07:31
    #if fields??> 判断不为null 不能判断 " " 2.<#if fields?size>0 > </#if> 判读集合长度大于0,不为空 3. 判断不为null 且不为空 <#if po.stat?? && po.stat != ""> ...
  • C++程序中#if 0 ... #endif的用法

    千次阅读 2019-05-07 11:32:23
    可以使用 #if 0 ... #endif 来实现注释,且可以实现嵌套,格式为: #if 0 code #endif 你可以把 #if 0 改成 #if 1 来执行 code 的代码。 这种形式对程序调试也可以帮助,测试时使用 #if 1 来执行测试代码,...
  • #ifif区别

    千次阅读 2017-08-09 09:27:57
    #if 和#ifdef的区别 标签: 编译器面试华为 2012-05-13 23:59 10491人阅读 评论(4)华为的面试题,#if 和#ifdef的区别  先看个例子: #define TARGET_LITTLE_ENDINA 1 #define TARGET_BIG_ENDINA 0 #...
  • C语言#if defined高级用法

    千次阅读 2019-09-10 09:17:15
    #if defined 和 #if !defined 后变为如下简洁风格代码 /* TEST1 或 TEST2被定义,则选择执行printf1,否则执行printf2 */ # if defined TEST1 || defined TEST2 printf1 ( "....." ) ; # else printf...
  • 说一下#if 1 #else #endif的用法

    千次阅读 2019-07-13 11:03:03
    # if 1 A #else B #endif 当为#if 1时,执行A,不执行B。 当为#if 0时,执行B,不执行A。 #endif 不可省略
  • C/C++用 #if 语言注释方法

    千次阅读 2019-05-17 22:01:29
    #if 0或 #if 1注释: 当想注释屏蔽掉大块代码段时,用"/*…*/"做大段注释,需要防止被注释掉的代码段中有嵌套的"/*…*/",一旦出现"/**/"嵌套"/**/"的情况,有可能会导致你注释掉的代码区域并不是...
  • Velocity 模板标签 #if

    千次阅读 2017-12-10 00:34:52
    #if 判断null和空字符串方法 (1)判断null #if( $name == null)  something code #end (2)判断null或者false #if( !$name)  something code #end (3)判断null或者空字符串 #if( ...
  • 看名字就知道,跟我们平时用的if、elseif、else是 一样的,不同的是这里一定要记得 #endif。 #if 条件 1  代码 1 #elif 条件 2  代码 2 #else  代码段 n+1 #endif 意思跟我们平常写的代码一样,如果条件...
  • #if xxx #endif条件注释的使用

    万次阅读 2018-05-07 16:47:45
    ' #if defined(X) print ("hello word!\n") ' #endif 以上编译只与编译宏X有关,与宏定义X的条件是否成立无关。如果定义了X宏,条件即成立,下面print语句会被编译;如果宏X未定义,则print语句不会备...
  • “#if 0/#if 1 ... #endif”的作用

    千次阅读 2014-11-08 12:29:12
    1、先说“#if 0/#if 1 ... #endif”的作用。我们知道,C标准不提供C++里的“//”这样的单行风格注释而只提供“/* */”这样的块注释功能,我们通常使用它写代码中说明性的注释文字(注释作用)以及在调试时关闭某段...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,982,351
精华内容 6,792,941
关键字:

#if