C语言的条件编译

1.含义

对一个程序的某些部分进行条件编译,多用于一个程序有多个版本的情况。

2.用法

预处理器条件:
if行 文本 elif 部分 else 部分 #endif
if行:
- #if 常量表达式
- #ifdef 标识符
-#ifndef 标识符
elif 部分:
- else行 文本 elif部分
elif 行:
- #elif 常量表达式
else 部分:
- else 行 文本
else 行:
- #else
以上是条件编译的语法形式,其中,每个条件编译指令在程序中均单独占一行。 预处理依次对#if以及后续的#elif行中的常量表达式进行计算,直到发现某个指令的常量表达式为非0值为止,这时将放弃值为0的指令行后面的文本。常量表达式不为0的#if和#elif指令之后的文本按照其他普通程序代码一样进行编译。在这里,”文本”是指任何不属于条件指令结构的程序代码,它可以包含预处理指令,也可以为空。

2.1用法示例1

3.使用条件编译容易发生的问题

#define THREE   
int main(int argc, char *argv[])
{
    #ifdef  FRIST
    printf("FRIST\n");

    #elif define SECOED
    printf("SECOND\n");

    #elif define THREE  
    printf("THREE\n");
    #endif

    return 0;
}

编译报错:

[Error] 未命名1.cpp:11:15: missing binary operator before token "SECOED"

原因分析:上面说的是在”SECOED”之前缺少二进制操作符,出现这种情况的时候,从错误原因找出解决办法,而且整个代码感觉完全没有错(别人都这这样用的,到我这里就出错啊)。其实是define少了一个d,在C语言中:
define:是宏定义标识符,预处理器会把标识符后续出现的代码用给定的记号序列替换掉,就是文本替换。
defined:检查某个名称的常量是否存在.如果该名称的常量已定义,返回 1;未定义则返回 0。
#elif后面要接常量表达式,所以#elif define是错误的,应该改为#elif defined.
睁大眼睛区分好“define”和“defined”。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值