【C++那些事儿】初识C++ 命名空间,C++中的输入输出以及缺省函数

news2024/11/19 15:37:44

在这里插入图片描述

君兮_的个人主页

即使走的再远,也勿忘启程时的初心

C/C++ 游戏开发

Hello,米娜桑们,这里是君兮_,数据结构和算法初阶更新完毕,我们继续来扩充我们的知识面,今天我们从认识C++开始来带大家学习C++,我之前看过一套书叫做《明朝那些事儿》,把本来枯燥的历史讲的生动有趣。而C++作为一门接近底层的语言,无疑是抽象且难度颇深的。我希望能努力把抽象繁多的知识讲的生动又通俗易懂,因此,咱们这个讲解C++的系列博客就叫做《C++那些事儿》啦

  • 好了废话不多说,开始我们今天的学习吧!!

    C++那些事儿

    • 先导:什么是C++?
      • C++在工作领域中的应用
      • 怎样学习C++呢?
    • 一.命名空间
      • 什么是命名空间
      • 命名空间的定义
      • 命名空间的使用
        • 命名空间的三种使用方式
    • 二. C++中的输入和输出
    • 三.缺省函数
      • 缺省函数的分类
    • 总结

先导:什么是C++?

说到C++,我们很多人都听过它的顶顶大名,C++也常年霸占着市面上程序员使用的编程语言前五的位置,足以说明它的重要性和被认可度,那么说到底,什么是C++呢?
在这里插入图片描述

  • C语言是结构化模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的
    程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机
    界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言
    应运而生。
    在这里插入图片描述

  • 1982年,Bjarne Stroustrup博士(C++祖师爷)在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。因此:C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计

说到底,就是咱们的祖师爷在自己使用C语言的时候,发现了许多C语言的不足和缺陷,这让祖师爷在用的时候非常的不爽,因此自己着手在C语言的基础上又开发了一门新的语言C++,他的语言他做主,他就在自己的语言中补足了C的缺陷和那些在使用时让人不爽的地方,C++应运而生,后来在经过不断的发展递进,不段引入新的标准和特性,就到了目前我们电脑中的C++啦!

C++在工作领域中的应用

  • 1. 操作系统以及大型系统软件开发
    所有操作系统几乎都是C/C++写的,许多大型软件背后几乎都是C++写的,比如:
    Photoshop、Office、JVM(Java虚拟机)等,究其原因还是性能高,可以直接操控硬件。
  • 2. 服务器端开发
    后台开发:主要侧重于业务逻辑的处理,即对于前端请求后端给出对应的响应,现在主流采
    用java,但内卷化比较严重,大厂可能会有C++后台开发,主要做一些基础组件,中间件、
    缓存、分布式存储等。服务器端开发比后台开发跟广泛,包含后台开发,一般对实时性要求
    比较高的,比如游戏服务器、流媒体服务器、网络通讯等都采用C++开发的。
  • 3. 游戏开发
    PC平台几乎所有的游戏都是C++写的,比如:魔兽世界、传奇、CS、跑跑卡丁车等,市面上
    相当多的游戏引擎都是基于C++开发的,比如:Cocos2d、虚幻4、DirectX等。三维游戏领
    域计算量非常庞大,底层的数学全都是矩阵变换,想要画面精美、内容丰富、游戏实时性
    搞,这些高难度需求无疑只能选C++语言。比较知名厂商:腾讯、网易、完美世界、巨人网
    络等。
  • 4. 嵌入式和物联网领域
    嵌入式:就是把具有计算能力的主控板嵌入到机器装置或者电子装置的内部,能够控制这些
    装置。比如:智能手环、摄像头、扫地机器人、智能音响等。
    谈到嵌入式开发,大家最能想到的就是单片机开发(即在8位、16位或者32位单片机产品或者
    裸机上进行的开发),嵌入式开发除了单片机开发以外,还包含在soc片上、系统层面、驱动
    层面以及应用、中间件层面的开发。
    常见的岗位有:嵌入式开发工程师、驱动开发工程师、系统开发工程师、Linux开发工程
    师、固件开发工程师等。
    知名的一些厂商,比如:以华为、vivo、oppo、小米为代表的手机厂;以紫光展锐、乐鑫为
    代表的芯片厂;以大疆、海康威视、大华、CVTE等具有自己终端业务厂商;以及海尔、海
    信、格力等传统家电行业。
    随着5G的普及,物联网(即万物互联,)也成为了一种新兴势力,比如:阿里lot、腾讯lot、京
    东、百度、美团等都有硬件相关的事业部。
  • 5. 数字图像处理
    数字图像处理中涉及到大量数学矩阵方面的运算,对CPU算力要求比较高,主要的图像处理
    算法库和开源库等都是C/C++写的,比如:OpenCV、OpenGL等,大名鼎鼎的Photoshop
    就是C++写的。
  • 6. 人工智能
    一提到人工智能,大家首先想到的就是python,认为学习人工智能就要学习python,这个
    是误区,python中库比较丰富,使用python可以快速搭建神经网络、填入参数导入数据就
    可以开始训练模型了。但人工智能背后深度学习算法等核心还是用C++写的。
  • 7. 分布式应用
    近年来移动互联网的兴起,各应用数据量业务量不断攀升;后端架构要不断提高性能和并发
    能力才能应对大信息时代的来临。在分布式领域,好些分布式框架、文件系统、中间组件等
    都是C++开发的。对分布式计算影响极大的Hadoop生态的几个重量级组件:HDFS、
    zookeeper、HBase等,也都是基于Google用C++实现的GFS、Chubby、BigTable。包括分
    布式计算框架MapReduce也是Google先用C++实现了一套,之后才有开源的java版本。

除了上述领域外,科学计算、浏览器、流媒体开发、网络软件等都是C++比较适合的场景,
作为一名老牌语言的常青树,C++一直霸占编程语言前5名,肯定有其存在的价值

怎样学习C++呢?

  • 这里有一套21天精通C++的秘籍供大家参考:
    在这里插入图片描述
  • C++缺点之一,是相对许多语言复杂,而且难学难精。因此想要在短暂的时间说精通它是基本不可能的,甚至说,目前敢自称精通C++的大佬,估计除了那些开发编译器和新语言的,少之又少。
  • 因此,在这里,我给大家的建议是不要把「精通C++」作为一个一年目标,应该要把学习语言作为一个持续的过程,同时把语言运用在具体的应用场合中,你想做到任何有挑战的事物,持之以恒是你最好的选择!!

好了,讲了这么多有关对C++的内容,不知道你是否准备好正式开始进入C++的学习呢?无论你准备没准备好,别想那么多,现在, Just Do it,不做你就不可能有进步,深吸一口气,开始我们正式的C++学习吧!!


一.命名空间

  • 不知道你是否遇到这种情况,当你在使用C语言的过程中,定义一个函数或变量时,编辑器提示你该函数或变量已存在
    在这里插入图片描述
  • 在C语言中,是无法解决这样的命名问题的,而为了解决命名冲突的问题,C++中提出了命名空间的概念

什么是命名空间

  • 在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存
    在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,
    以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的

命名空间的定义

  • 定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}
    中即为命名空间的成员。
#include<iostream>
namespace junxi
{
    int rand = 10;
}
int main()
{
    printf("%d\n", rand);//在这里这是错误的用法,别急,在使用命名空间是会讲
    return 0;
}

在以后的工作和项目开发中,往往是多人协作的,为了防止和别的命名空间冲突,这里的命名空间建议写成自己的名字的缩写,当然其他的也行,你自己认得出来就没啥问题。

  • 在定义的命名空间中,除了变量以外,还可以定义函数,结构体等等,
    此外,命名空间是支持嵌套的,也就是允许在命名空间中在定义一个命名空间。
    最后,在同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中,在实际的开发中,这种方法不常用就是了。
namespace junxi
{
    int rand = 10;

    int Add(int x, int y)
    {
        return x + y;
    }
    
    namespace Junxi//嵌套
    {
       
        
    }
    struct Node
    {
        struct Node* next;
        int val;
    };

}
//同一工程中相同的命名空间最后会合并
namespace junxi
{
    int a = 0;
    int b = 0;
}
int main()
{
    printf("%d\n", rand);
    return 0;
}
  • 注意:
  • 1.千万不要把主函数写在一个命名空间中,我们知道,每一个工程中都需要一个主函数,如果你把主函数写在一个命名空间中又不使用它,这个工程中就是没有主函数的!!
  • 2.一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中

命名空间的使用

  • 回顾我们刚才的这段代码,我在上面说了,在打印rand的时候是有错误的
    在这里插入图片描述
  • 当我们打印时,会出现随机数,这是为什么呢?
  • 因为rand在命名空间中,我们要想使用一个命名空间中的成员就得像下面这样:

命名空间的三种使用方式

  • 1.加命名空间名称及作用域限定符
int main()
{
    printf("%d\n", junxi::rand);
    return 0;
}

在这里插入图片描述

  • 2.使用using将命名空间中某个成员引入
using junxi::a;
int main()
{
    printf("%d\n", a);
    return 0;
}
  • 3.使用using namespace 命名空间名称引入
using namespace junxi;
int main()
{
    printf("%d\n", a);
    return 0;
}
  • 如果你仔细观察会发现,我这里2,3这两种命名空间的使用时没有打印rand,这是为什么呢?
  • 注意:
  • 并不是说在C++中就完全解决了C语言中函数重定义的问题,当我们遇到以下情况时,仍然会报错:
  • 第一种情况
namespace junxi
{
    int rand = 10;

    int Add(int x, int y)
    {
        return x + y;
    }
    
    namespace Junxi
    {
       
        
    }
    struct Node
    {
        struct Node* next;
        int val;
    };

}

using junxi::rand;
int main()
{
    printf("%d\n", rand);
    return 0;
}

在这里插入图片描述

  • 第二种情况
using namespace junxi;
int main()
{
    printf("%d\n", rand);
    return 0;
}

在这里插入图片描述

  • 此时,你虽然引用了命名空间或者指出了对应命名空间中的成员,但是由于库中存在rand这个函数,你在打印时没有明确指出到底是哪个是要打印的,编译器就无法编译不明确的代码,因此,如果你在实际编程开发中遇到上面这种情况,建议使用第一种使用命名空间成员的办法!!

二. C++中的输入和输出

  • 我们很多人学习编程语言的一个输入往往是“hello world”,那么,我们怎样用C++对这个美好的世界进行问候呢?
#include<iostream>
// std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中(类似于我们C语言中的stdio)
using namespace std;
int main()
{
cout<<"Hello world!!!"<<endl;//输出
return 0;
}
  • 具体说明
  • 1. 使用 cout标准输出对象(控制台)cin标准输入对象(键盘) 时,必须包含< iostream >头文件
    以及按命名空间使用方法使用std。
  • 2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含<
    iostream >头文件中。
  • 3. <<是流插入运算符,>>是流提取运算符。
  • 4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。C++的输入输出可以自动识别变量类型
#include <iostream>
using namespace std;
int main()
{
    int a;
    double b;
    char c;
    // 可以自动识别变量的类型
    cin >> a;
    cin >> b >> c;//输入数回车结束 先输入到b中,再输入到c中
    cout << a << endl;
    cout << b << " " << c << endl;//从左到右打印
    return 0;
}
  • 这里这么多<< 和 >>很多初学的同学可能会分不清,那么我教大家一个能快速记住的小寄巧
  • <<流插入运算符,你把它当作水流,也就是把你要输入的内容流入cout,cout就帮你把里面的内容输出到控制台上,也就是打印啦!
  • >>流提取运算符,cin从键盘上读取到数据后,流出>>到你想要它到的地方,是不是就是输入啦!
  • 也就是说,看这俩运算符的指向,就能很轻易的帮我们分辨出到底是输入还是输出
  • 很多人,看到这里可能会有这样的疑问,那在日常使用时,怎样用cout和cin控制整形进制格式或者浮点数输出精度呢?

cout和cin当然可以帮我们达到这样的目标,对应初学者来说,使用cout和cin控制输入输出是比较麻烦的,因此,我们就不在这里展开学习了。如果你真的在使用过程中遇到类似的需要,别忘了C++是兼容C的哦!我们可以用C的方法实现嘛


三.缺省函数

  • 什么是缺省函数呢?
  • 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实
    参则采用该形参的缺省值,否则使用指定的实参
void Func(int a = 0)
{
    cout << a << endl;
}
int main()
{
    Func(); // 没有传参时,使用参数的默认值
    Func(10); // 传参时,使用指定的实参
    return 0;
}

在这里插入图片描述

缺省函数的分类

  • 上面的例子,我们的函数只有一个传入的参数,当传入多个参数时,我们的缺省函数就存在不同的种类了
  • 全缺省函数
void Func(int a = 10, int b = 20, int c = 30)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}
  • 即每一个传入的参数都有一个缺省值的函数,我们视为全缺省函数

  • 半缺省函数

void Func(int a, int b = 10, int c = 20)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}

注意:

1. 半缺省参数必须从右往左依次来给出,不能间隔着给
2. 缺省参数不能在函数声明和定义中同时出现,往往是出现在声明中
3. 缺省值必须是常量或者全局变量
4. C语言不支持缺省函数(编译器不支持)

  • 下面我来对上述的前两点注意进行一下解释
  • 第一点 为什么必须从左到右不能间隔给呢?
void Func(int c, int a = 0, int d )
{
    cout << c << endl;
    cout << a << endl;
    cout << d << endl;
}
int main()
{
    
    Func(10); // 传参时,使用指定的实参
    return 0;
}
  • 如果出现上面这种情况,我们只传入了一个参数,那么,请问,这个参数到底是赋给c还是赋给d呢?只有你知道,而咱们的编译器是不知道的,因此必须按顺序设置缺省参数的值
  • 第二点,为什么不能在函数的声明和定义中同时出现?
//a.h 在头文件中
void Func(int a = 10);
// a.cpp //具体实现时的定义
void Func(int a = 20)
{}
  • 如果出现以上的情况,当声明与定义你给的缺省参数是不同的,那么编译器在运行程序时到底是以谁为准呢?同时,正常来说,也不能只在定义中给,因为如果你在使用某个函数时只引用了它对应的头文件,在声明中是不存在缺省参数的,你实际在使用该函数时就是没有缺省参数的。因此,在我们的日常使用中,最好是在声明中使用缺省函数。

总结

  • 好啦,我们今天的内容就先到这里啦!今天我们主要介绍了C++中命名空间,输入输出和缺省函数的概念使用以及注意事项,俗话说心急吃不了热豆腐,正如我前面所说,学习C++不是一朝一夕的事情,只有不断的积累和反复的练习才能帮你攀上C++这座高峰。

  • 有任何的问题和对文章内容的疑惑欢迎在评论区中提出,当然也可以私信我,我会在第一时间回复的!!

新人博主创作不易,如果感觉文章内容对你有所帮助的话不妨三连一下再走呗。你们的支持就是我更新的动力!!!

**(可莉请求你们三连支持一下博主!!!点击下方评论点赞收藏帮帮可莉吧)**

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1105646.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

半导体测试方法主要有哪几种?

外观检测&#xff1a;对半导体外观质量的评估&#xff0c;包括检查芯片的平整度、颜色、镜面度等。 电性能测试&#xff1a;测量半导体的电导率、电阻率、电流和电压特性等&#xff0c;以评估其电性能。 温度测试&#xff1a;用于测量半导体在不同温度下的电性能表现&#xf…

软件测试过程中如何有效的开展接口自动化测试

一.简介 接口自动化测试是指使用自动化测试工具和脚本对软件系统中的接口进行测试的过程。其目的是在软件开发过程中&#xff0c;通过对接口的自动化测试来提高测试效率和测试质量&#xff0c;减少人工测试的工作量和测试成本&#xff0c;并且能够快速发现和修复接口错误&…

37 WEB漏洞-反序列化之PHPJAVA全解(上)

目录 PHP反序列化演示案例&#xff1a;先搞一把PHP反序列化热身题稳住-无类问题-本地在撸一把CTF反序列化小真题压压惊-无类执行-实例最后顶一把网鼎杯2020青龙大真题舒服下-有类魔术方法触发-实例 https://www.cnblogs.com/zhengna/p/15661109.html 代码在线测试平台&#xff…

相机镜头选择与机器视觉控制

相机镜头选择与机器视觉控制 在机器视觉领域&#xff0c;除了图像处理和算法&#xff0c;还需要关注硬件方面的选型和控制。相机镜头的选择是其中重要的一部分&#xff0c;需要考虑像素大小、镜头焦距等因素以满足项目需求。此外&#xff0c;编程技能也包括相机的调用和使用&a…

django建站过程(1)

django建站过程&#xff08;1&#xff09; 使用pycharm创建过程运行项目创建数据库创建超级用户登录生成的后台&#xff1a;界面本地化 准备以django,bootstrap来做一个过程记录&#xff0c;文章主要阐述过程的细节。 使用pycharm创建过程 创建项目“schoolapps”&#xff0c;…

基于openHarmony实现本地UDP通信

知识补充 简介 套接字(Socket)&#xff0c;就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端&#xff0c;提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲&#xff0c;套接字上联应用进程&#xff0c;下联…

MMDP: A Mobile-IoT Based Multi-Modal Reinforcement Learning Service Framework

框架 AHTT可被定义为 AHTT的元素表示智能体在动作为 a l m n a_{lmn} almn​的情况下从张量状态 s i j k s_{ijk} sijk​转移到另一个张量状态 s i j k ′ s_{ijk}^{} sijk′​的概率 通过数理统计首先得到多变量频率张量 状态 s i j k s_{ijk} sijk​的值函数等于策略 π…

凌恩快讯 | 凌恩生物联手墨卓生物,为中国科研注入国人力量!

金秋十月&#xff0c;丹桂飘香。 凌恩生物又添新设备&#xff0c;成功引进墨卓生物科技高稳定、高性价比的MobiNova单细胞解决方案&#xff0c;构建凌恩单细胞组学产线&#xff0c;这一产品线的构建&#xff0c;将极大拓展凌恩生物在农学、医学相关科研领域的服务范围&#xff…

全国400电话办理,简单步骤帮您申请成功

导语&#xff1a;随着企业业务的扩展和市场需求的增加&#xff0c;越来越多的企业开始关注全国400电话的申请。本文将为您介绍全国400电话的办理步骤&#xff0c;帮助您顺利完成申请过程。 正文&#xff1a; 一、了解全国400电话 全国400电话是一种虚拟电话号码&#xff0c;…

Uniapp 电子签名 包含 返回 撤回 颜色 线条等功能

请观看 使用教程 第一步 引入图标 在项目中的App.vue内添加下面代码 <style>/*引入图标路径 */import uni_modules/TC-qianming/libs/css/iconfont.css; </style> 第二步 引入组件即可 <template><view><TC-qianming></TC-qianming>&l…

Eolink Apikit 接口自动化测试流程

自动化测试是一种软件测试方法&#xff0c;利用自动化工具和脚本来执行测试用例&#xff0c;以验证软件应用程序的功能、性能、稳定性等特性。自动化测试的主要目的是提高测试效率、减少测试成本&#xff0c;并确保软件的质量和可靠性。 作为测试人员&#xff0c;在进行比较大…

定制AI问答机器人前需要准备什么数据来训练AI模型?

AI问答机器人利用自然语言处理&#xff08;NLP&#xff09;技术来理解和回应用户的查询&#xff0c;能通过分析大量数据提供准确和相关的答案。要定制一个AI问答机器人&#xff0c;收集必要的资源和工具是至关重要的。获取用于训练模型的数据集是个关键的基础&#xff0c;然后通…

uniapp(uncloud) 使用生态开发接口详情4(wangeditor 富文本, 云对象, postman 网络请求)

wangeditor 官网: https://www.wangeditor.com/v4/pages/01-%E5%BC%80%E5%A7%8B%E4%BD%BF%E7%94%A8/01-%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8.html 这里用vue2版本,用wangeditor 4 终端命令: npm i wangeditor --save 开始使用 在项目pages > sy_news > add.vue 页面中…

线程池扩容和拒绝策略(CallerRunsPolicy)验证

结论&#xff1a; 1、线程池队列容量满了后&#xff0c;迅速扩容至maxPoolSize 2、队列满后&#xff0c;再进来任务&#xff0c;则主线程执行任务 3、任务执行完后&#xff0c;等待&#xff08;keepAliveSeconds&#xff09;&#xff0c;主线程数然后恢复至corePoolSize 1、…

【音视频|ALSA】基于alsa-lib开发ALSA应用层程序--附带源码

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

【前端学习】—let const var之间的区别(十三)

【前端学习】—let const var之间的区别&#xff08;十三&#xff09; 一、let const var之间的区别 二、代码演示 <script>// 1、const let不存在变量提升 var 存在变量提升//var console.log(fullName,fullName);//fullName undefined //var fullNamecai; /* var 声明…

YOLO目标检测——肺结节数据集【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;肺结节检测数据集主要应用于医学影像分析领域&#xff0c;特别是在肺结节检测和恶性风险评估方面。数据集说明&#xff1a;YOLO目标检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富。使用lableimg标注软件标注&#xff0c;标…

浅谈智能操控及无线测温产品在马来西亚理文造纸雪邦热电站项目中的应用

摘要&#xff1a;为避免因电线接头松动、电缆老化等引发高温造成火灾&#xff0c;所造成的的经济损失巨大&#xff0c;在一些电气设备如大电流电缆设备节点、电力设备局部异常升温部位、开关柜的动静触头&#xff0c;进线与出线母排接点、整流柜中的电气接点、变压器节点、变电…

win11 电脑 使用 python 连接USB 海康工业相机 运行示例程序 BasicDemo.py

win11 电脑 使用 python 连接USB 海康工业相机 运行示例程序 BasicDemo.py 1.下载海康的mvs客户端和mvs_sdk驱动 官网链接&#xff1a; https://www.hikrobotics.com/cn/machinevision/service/download?module0 下载这两个东西&#xff0c;然后安装 1.1 我的mvs安装在 F:\…

PHPstorm设置自定义代码自动提示,实现HTML页面的模版标签的提示

for {foreach $VAR0$ as $key>$vo } {/foreach}if {if $VAR0$$b }{else /}{/if}ifel {if $VAR0$$b}{elseif $a$b /}{else /}{/if}