首页
学习
活动
专区
圈层
工具
发布

C++中定义一个函数为bool类型的作用「建议收藏」

bool可用于定义函数类型为布尔型,函数里可以有 return true; return false 之类的语句。...bool类型常作为循环、选择语句的判断依据。比如if(a());这个if语句就需要判断a()的返回值为true还是false,若是true,才会执行if语句内的操作。...<< endl; } return 0; } 3.bool与BOOL的区别 BOOL是微软定义的typedef int BOOL,用途是解决程序在C与C++中环境的差异。...BOOL与bool不同,它是一个三值逻辑,TRUE/FALSE/ERROR,定义于WinDef.h头文件中。返回值为1的整数为TRUE,0为FALSE,-1为ERROR。...,当值为1的时候,可看做TRUE 注意: 1)如果是写标准的C++,那么就全用bool; 2)如果是写vc++,就尽量使用BOOL,避免转换产生的性能警告。

3.3K20

C语言之预处理命令与用typedef命名已有类型

有以下三类:宏定义,文件包含,条件编译。   宏定义(分为带参数与不带参数两种)  宏定义是用宏名代替一个字符串,也是简单的置换,不作正确性检查。...宏定义不是C语句,不必在行未加分号; #define命令出现在程序中函数的外面,宏名的有限范围为定义命令之后到本源文件结束。 可以用#undef命令终止宏定义的作用域。...头文件除了可以包含函数原型和宏定义外,也可以包括结构体类型定义和全局变量定义等。   条件编译 程序中的某一部分需要满足一定条件时才进行编译,也就是对这一部分内容指定编译的条件,这就是条件编译。...宏定义只是简单的字符串代换(原地扩展),而typedef则不是原地扩展,它的新名字具有一定的封装性,以致于新命名的标识符具有更易定义变量的功能。...如: typedef int (*PF) (const char *, const char *);  定义一个指向函数的指针的数据类型PF,其中函数返回值为int,参数为const char *。

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

    提高代码逼格的利器:宏定义-从入门到放弃

    宏的本质就是代码生成器,在预处理器的支持下实现代码的动态生成,具体的操作通过条件编译和宏扩展来实现。我们先在心中建立这么一个基本的概念,然后通过实际的描述和代码来深入的体会:如何驾驭宏定义。...宏扩展最大的好处有如下几点: 减少重复的代码; 完成一些通过 C 语法无法实现的功能(字符串拼接); 动态定义数据类型,实现类似 C++ 中模板的功能; 程序更容易理解、修改(例如:数字、字符串常亮)...所以,从代码的动态生成角度看,宏定义和 C++ 中的模板参数有点神似,只不过宏定义仅仅是代码扩展而已。...看一下宏扩展之后的代码(__VA_ARGS__为空): printf("hello \n",); 看出问题了吧?在格式化字符串的后面多了一个逗号!...如果不需要打印语句,通过把打印日志信息那条语句定义为空语句来达到目的。

    1.4K40

    C++内联函数

    一、内联函数概念 在c++中,预定义宏的概念是用内联函数来实现的,而内联函数本身也是一个真正的函数。 内联函数具有普通函数的所有行为。...唯一不同之处在于内联函数会在适当的地方像预定义宏 一样展开,所以不需要函数调用的开销。因此应该不使用宏,使用内联函数。 在普通函数(非成员函数)函数前面加上inline关键字使之成为内联函数。...这些事预 处理器无法完成的。 内联函数的确占用空间,但是内联函数相对于普通函数的优势只是省去了函数调用时候的压 栈,跳转,返回的开销。我们可以理解为内联函数是以空间换时间。...int b) { return a+b; } int main() { int a = 10; int b = 20; int c = myadd(a,b) *5; }  任何在类内部定义的函数自动成为内联函数...但是c++内联编译会有一些限制,以下情况编译器可能考虑不会将函数进行内联编译: 不能存在任何形式的循环语句 不能存在过多的条件判断语句 函数体不能过于庞大 不能对函数进行取址操作 内联仅仅只是给编译器一个建议

    1.4K40

    C++中条件编译

    定义C++中的条件编译是一种剪切指令,用于在编译时根据条件编译地包含或排除代码块。这些指令基于定义了某个符号(通常称为“宏”),对源代码进行控制,使得开发商可以根据不同的情况下需要特定的执行代码。...#ifdef仅检查指定的宏是否已经定义,考虑其值。#if Defined()是针对某个宏或者多个宏进行判断#if可以用来测试一个表达式的真假,并支持比较操作符(如>、为非零,则条件为真;否则条件为假的。...条件编译的指令总结如下#define:定义一个预处理宏#undef:取消宏的定义#if:编译预处理中的条件命令,相当于C语法中的if语句#ifdef:判断某个宏是否被定义,若已定义,执行随后的语句#ifndef...:与#ifdef相反,判断某个宏是否未被定义#elif:若#if, #ifdef, #ifndef或前面的#elif条件不满足,则执行#elif之后的语句,相当于C语法中的else-if#else:与#

    56810

    C中的预编译宏定义

    文章来自 http://www.uml.org.cn/c++/200902104.asp 在将一个C源程序转换为可执行程序的过程中, 编译预处理是最初的步骤....比如: 你可以将一个宏扩展为与C语法格格不入的内容, 但该内容与后面的语句结合在一个若能生成合法的C语句, 也是可以正确编译的....以#开头的语句就是预处理命令, 不以#开头的语句为C中的代码行....#if 0 {     一大段代码; } #endif 常量表达式可以是包含宏, 算术运算, 逻辑运算等等的合法C常量表达式, 如果常量表达式为一个未定义的宏, 那么它的值被视为0....#define PRAGMA_DEP #pragma GCC dependency "temp-file" 由于预处理之进行一次宏扩展, 采用上面的方法会在编译时引发错误, 要将#pragma语句定义成一个宏扩展

    3.4K40

    长文详解:C语言预处理命令

    C语言提供多种预处理功能,主要处理#开始的预编译指令,如宏定义(#define)、文件包含(#include)、条件编译(#ifdef)等。...带参宏调用的一般形式为: 宏名(实参表); 在宏定义中的形参是标识符,而宏调用中的实参可以是表达式。 在带参宏定义中,形参不分配内存单元,因此不必作类型定义。...为解决这个问题,GNU CPP中做了如下扩展定义: #define DBGMSG(format, ...)...此外,为避免宏的实参与其内部定义的变量同名而造成覆盖,最好在变量名前加上_(基于如下编程惯例:除非是库,否则不应定义以_开始的变量)。 3) 若宏出现在判断语句之后,可保证作为一个整体来实现。...但C/C++编程中,在每条语句后加分号是约定俗成的习惯,此时以下代码 if(NULL !

    3.3K10

    C++ #define详解

    #define 的作用 在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。被定义为“宏”的标识符称为“宏名”。...在C或C++语言中,“宏”分为有参数和无参数两种。 无参宏定义 无参宏的宏名后不带参数。 其定义的一般形式为: #define 标识符 字符串 其中的“#”表示这是一条预处理命令。...如当作以下定义后:#difine M (a)+(b) 在宏展开时将得到下述语句:S= (a)+(b)*(a)+(b) 对于宏定义还要说明以下几点: 1....如有错误,只能在编译已被宏展开后的源程序时发现。 2. 宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。 3. 宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。...a:b,形参a,b均出现在条件表达式中。程序第七行max=MAX(x,y)为宏调用,实参x,y,将代换形参a,b。宏展开后该语句为: max=(x>y)?x:y; 用于计算x,y中的大数。

    2K10

    【Linux探索学习】第八弹——Linux工具篇(三):Linux 中的编译器 GCC 的编译原理和使用详解

    预处理器主要完成以下任务: 宏替换:将定义的宏(如 #define)替换为实际的值。 文件包含:处理 #include 指令,将被包含的文件内容插入到源文件中。...条件编译:根据条件指令(如 #ifdef, #ifndef 等)选择性地编译代码。 预处理的结果是一个扩展名为 .i 的中间文件,包含了所有的宏替换和文件包含后的代码。...语义分析:检查程序的语义,例如变量是否已定义、类型是否匹配等。 编译的结果是一个扩展名为 .s 的汇编语言文件。...地址分配:为代码和数据分配内存地址。 链接的结果是一个可执行的二进制文件,通常以无扩展名或 .out 扩展名表示。...gcc hello.o -o hello 链接是这几步里面最需要讲解的,因为它涉及到一个叫函数库的概念,函数库我们在下面详细讲解吧 GCC 的编译过程可以概括为以下几个步骤: 预处理:处理宏和头文件,生成

    51410

    Objective-C 中 9 种避免使用 Xcode 预处理器宏的方法

    除非您的自定义宏依赖于 Xcode 预处理器宏(如__LINE__),否则请将其重写为一个独立函数。(即便依赖于 Xcode 预处理宏,也要让您的宏调用另一个函数,并尽可能多地转移到该函数中)。...,在一个实现文件中创建一个定义。...只不过,这次我们定义的是一个常量字符串,它实际上是一个对象,在 Objective-C 中表示为指针。因此,我们要定义一个常量指针。...常量字符串通常在多个文件中共享,因此这里介绍如何在 .h 文件中声明常量: extern NSString *const JMRResponseSuccess; 因此,.m 文件中的定义是 NSString...9、条件编译:支持多个项目或平台 Smell #if PROJECT_A … #else … #endif 在多个项目(或多个平台)中共享代码时,很容易在共享源文件中偷偷加入特定于项目的扩展。

    61810

    速度与敏捷:解密Velocity的奥秘

    以下是如何在Velocity中使用变量以及常见的输出方式和过滤器的解释: 变量的定义和引用: 定义变量:使用#set指令来定义一个变量,然后可以在模板中引用它。...第三:条件判断与逻辑实现 在Velocity中,条件语句(如if、else、elseif)用于实现逻辑判断和控制模板的输出。你可以创建复杂的逻辑判断以根据不同条件执行不同的代码块。...以下是深入研究Velocity中条件语句和复杂逻辑判断的详细解释: 基本条件语句: #if:#if指令用于执行条件判断,如果条件为真,则执行相应的代码块。...如果条件为假,可以选择执行一个可选的#else块。...以下是如何在Velocity中创建和使用宏的详细介绍: 1. 定义宏: 要创建宏,你需要使用#macro指令定义宏,然后在宏中编写要重用的代码块。宏可以接受参数,允许你在每次调用时传递不同的值。

    33600

    C语言编程规范 clean code

    理由: 代码逻辑直观,易读; 在已有条件语句代码上增加新代码时不容易出错; 对于在条件语句中使用函数式宏时,没有大括号保护容易出错(如果宏定义时遗漏了大括号)。...在使用 .inc 作为头文件扩展名的产品,习惯上用于标识此头文件为私有头文件。但是从产品的实际代码来看,这一条并没有被遵守,一个 .inc 文件被多个 .c 包含。...其链接规范为 "C++"。...当宏在调用点展开后,宏内定义的表达式和变量融合到调用代码中,可能会出现变量名冲突和宏内语句被分割等问题。...使用此类宏务必特别小心。 宏中包含不完整语句时,可以例外。比如用宏封装 for 循环的条件部分。 非多条语句,或单个 if/for/while/switch 语句,可以例外。

    6.2K10

    C语言编程规范 clean code

    理由: 代码逻辑直观,易读; 在已有条件语句代码上增加新代码时不容易出错; 对于在条件语句中使用函数式宏时,没有大括号保护容易出错(如果宏定义时遗漏了大括号)。...在使用 .inc 作为头文件扩展名的产品,习惯上用于标识此头文件为私有头文件。但是从产品的实际代码来看,这一条并没有被遵守,一个 .inc 文件被多个 .c 包含。...其链接规范为 "C++"。...当宏在调用点展开后,宏内定义的表达式和变量融合到调用代码中,可能会出现变量名冲突和宏内语句被分割等问题。...使用此类宏务必特别小心。 宏中包含不完整语句时,可以例外。比如用宏封装 for 循环的条件部分。 非多条语句,或单个 if/for/while/switch 语句,可以例外。

    4.9K10

    《不定参数与不定宏参数:C++程序员必须掌握的灵活编程技巧》

    () ❌ if 判断无法绕过编译检查 即使条件为 false,编译器仍需验证所有语法路径 ✅ 提供清晰的递归终止条件 明确定义递归终点,提高代码可读性和维护性 那么我还有个问题:下面的输出是什么呢?...(rest) 是否为 0,编译器仍然会检查所有路径下的函数调用是否合法 。 换句话说,即使 if 条件为假,只要代码中存在 printWithSep(...) 调用,编译器就会要求该函数存在并匹配。...不定参宏函数 在 C/C++ 编程中,不定参宏函数(Variadic Macros) 是一种允许你定义带有可变数量参数的宏的技术。...基本概念:不定参宏函数本质上是使用了预处理器的 __VA_ARGS__ 关键字,这个关键字表示宏定义中未命名的参数部分。它可以匹配任意数量的参数,并在宏展开时替换为实际传入的参数列表。...__VA_ARGS__ 表示可变参数部分 前面至少有一个固定参数(C99 要求),C++ 中可以省略(GCC 扩展支持空参数) 1.

    33300

    《C++中的反射机制:开启高级编程之门》

    本文将深入探讨如何在 C++中实现反射机制,以及它在实际编程中的应用。 二、什么是反射机制?...例如,我们可以定义一个宏来获取对象的成员变量的名称和类型: cpp 复制 #define REFLECT_MEMBER(member) #member, decltype(member) 然后,我们可以在类中使用这个宏来定义反射信息...例如,我们可以定义一个代理类,它继承自被代理的类,并在代理类中重写被代理类的成员函数。在重写的成员函数中,我们可以添加一些额外的逻辑,如日志记录、性能统计等。...在 C++中,我们可以使用反射机制来实现对象序列化。 例如,我们可以定义一个序列化函数,它遍历对象的成员变量,并将其转换为字节流。...在 C++中,我们可以使用反射机制来实现插件系统。 例如,我们可以定义一个插件接口,它包含一些虚函数,用于实现插件的功能。

    91110

    defer in C++Objc

    Objective-C或C++来说,苹果并没有帮我们定义,因此本文总结一下如何在C++和Objective-C中实现defer。...cleanup cleanup指令可以说是非常符合我们当前的需求,该指令接受一个返回为空,参数个数是1个的函数指针作为其参数,在声明的作用域结束之前执行指定的函数。...虽然上面的代码已经可以基本实现我们的需求,但是假如每次使用都要敲上面这么长的声明变量语句,怕是很难记住,因此,参考Reactive Cocoa中神奇的@onExit宏,我们可以定义以下的宏: #define...__LINE__ @onExit到这里可以说已经非常接近defer的功能了,但依然还差一点,就是@onExit一个作用域只能声明一次,这是因为onExit宏中我们声明的变量名是ext_exitBlock...究其原因,就是因为return语句并不是原子语句,在test函数return时,执行的顺序是确定返回值result = 1 -> 执行@onExit -> 函数返回,因此即使@onExit中修改了返回值

    1.2K20

    C++条件分支结构

    #define 宏常量 定义:#define 标识符 字符串 1.宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的代换,字符串中可以含任何字符,可以是常数,也可以是表达式...如有错误,只能在编译已被宏展开后的源程序时发现。 2.宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。 3.宏定义其作用域为宏定义命令起到源程序结束。...简而言之,#define可以理解为起名函数,#define number 999 number就被简单的定义为999。...目前听说但未遇到的用法: 1.有参宏定义 2.宏定义中的特殊操作符 3.宏定义中的多行定义 4.防止重复包含头文件 6....else { 分支语句; } 分支后语句 ---- 2.switch语句 ---- switch ( 条件表达式) { case 表达式: break; case

    69010

    单片机开发之C语言编程基本规范

    5) 源程序中关系较为紧密的代码应尽可能相邻。 6) 完成简单功能、关系非常密切的一条或几条语句可编写为函数或定义为宏。 5....其它的公共头文件没有同名要求,只要表清文件含义即可,如“Type.h”,“GP32C.h”等。 总头文件在一个工程中只有一个,它的名称较为固定,一般取为“Includes.h”。...② #define的用法 #define为一宏定义语句,通常用它来定义常量(包括无参量与带参量),以及用来实现那些“表面似和善、背后一长串”的宏,它本身并不在编译过程中进行,而是在这之前(预处理过程)...宏定义只是简单的字符串代换(原地扩展),而typedef则不是原地扩展,它的新名字具有一定的封装性,以致于新命名的标识符具有更易定义变量的功能。...2) 中断的开放和禁止 使用宏定义方式开放或禁止中断,宏定义语句放在EnDisInt.h头文件中。宏名的定义方法: 开放中断以Enable标识,宏名中包含中断名,宏名最后以Int结束。

    2.2K20

    #define和typedef的用法与区别及面试问题

    二、#define的用法 #define为一宏定义语句,通常用它来定义常量(包括无参量与带参量),以及用来实现那些“表面似和善、背后一长串”的宏,它本身并不在编 译过程中进行,而是在这之前(预处理过程)...1中有关于#define语句弊端的分析,以及好的替代方法,大家可参看。...为了尽可能地兼容,一般都遵循#define定义“可读”的常量以及一些宏语句的任务,而typedef则常用来定义关键字、冗 长的类型的别名。...宏定义只是简单的字符串代换(原地扩展),而typedef则不是原地扩展,它的新名字具有一定的封装性,以致于新命名的标识符具有更易定义变 量的功能。...另外,因为typedef是定义了一种类型的新别名,不是简单的字符串替换,所以它比宏来得稳健(虽然用宏有时也可以完成以上的用途)。  用途四:  为复杂的声明定义一个新的简单的别名。

    3.2K10

    你只用do-while来实现循环?太浪费了!

    地球人都知道,do-while语句是C/C++中的一个循环语句,特点是: 至少执行一次循环体; 在循环的尾部进行结束条件的判断。 ?...if条件为假,这2个变量都不要自增,但是输出结果却是:第二个参数自增了。...为了不对宏的使用者提出要求,可以在宏的最后加一个分号即可,如下: #define OPT(a, b) do{a++;b++;}while(0); 小结:使用do-while语句来包裹宏定义中的多行语句...另一个也不错的宏定义 如果宏定义需要返回一个结果,最好的方式就是:使用({...})把宏定义中的多行语句包裹起来。...在上面的实例中,圆括号要放在大括号的外层。 使用({...})定义宏,因为是多行语句,可以返回一个结果,比do-while更胜一筹。

    1K20
    领券