首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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,0FALSE,-1ERROR。...,当值1时候,可看做TRUE 注意: 1)如果是写标准C++,那么就全用bool; 2)如果是写vc++,就尽量使用BOOL,避免转换产生性能警告。

1.6K20

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

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

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

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

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

1K40

C++内联函数

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

1.1K40

C++条件编译

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

17410

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语句定义一个扩展

2.8K40

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

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

2.6K10

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大数。

1.7K10

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

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

8210

C语言编程规范 clean code

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

5.3K10

C语言编程规范 clean code

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

4.2K10

C++条件分支结构

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

53410

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修改了返回值

98720

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

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

1.8K20

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

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

2.9K10

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

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

83520

开心档之C++ 预处理器

预处理指令不是 C++ 语句,所以它们不会以分号(;)结尾。 我们已经看到,之前所有的实例中都有 #include 指令。这个用于把头文件包含到源文件。...该符号常量通常称为,指令一般形式是: #define macro-name replacement-text 当这一行代码出现在一个文件时,在该文件后续出现所有都将会在程序编译之前被替换为...cout << "Value of PI :" << 3.14159 << endl; return 0; } 参数 您可以使用 #define 来定义一个带有参数,如下所示: #include...cerr <<"Variable x = " << x << endl; #endif 如果在指令 #ifdef DEBUG 之前已经<em>定义</em>了符号常量 DEBUG,则会对程序<em>中</em><em>的</em> cerr <em>语句</em>进行编译。...不难理解,<em>C++</em> 预处理器把下面这行: cout << concat(x, y); 转换成了: cout << xy; <em>C++</em> <em>中</em><em>的</em>预<em>定义</em><em>宏</em> <em>C++</em> 提供了下表所示<em>的</em>一些预<em>定义</em><em>宏</em>: <em>宏</em> 描述 LINE

27520

typedef和define具体具体差别

另转一篇 一、typedef使用方法 在C/C++语言中,typedef经常使用来定义一个标识符及keyword别名,它是语言编译过程一部分,但它并不实际分配内存空间,实例像: typedef...二、#define使用方法 #define定义语句,通经常使用它来定义常量(包含无參量与带參量),以及用来实现那些“表面似和善、背后一长串”,它本身并不在编译过程中进行,而是在这之前...为了尽可能地兼容,一般都遵循#define定义“可读”常量以及一些语句任务,而typedef则经常使用来定义keyword、冗长类型别 名。...定义仅仅是简单字符串代换(原地扩展),而typedef则不是原地扩展,它新名字具有一定封装性,以致于新命名标识符具有更易定义变量功能。...实践见差别:pINT a,b;效果同int *a; int *b;表示定义了两个整型指针变量。而pINT2 a,b;效果同int *a, b;表示定义一个整型指针变量a和整型变量b。

48110

开心档之C++ 预处理器

预处理指令不是 C++ 语句,所以它们不会以分号(;)结尾。 我们已经看到,之前所有的实例中都有 #include 指令。这个用于把头文件包含到源文件。...该符号常量通常称为,指令一般形式是: #define macro-name replacement-text 当这一行代码出现在一个文件时,在该文件后续出现所有都将会在程序编译之前被替换为...cout << "Value of PI :" << 3.14159 << endl; return 0; } 参数 您可以使用 #define 来定义一个带有参数,如下所示: #include...cerr <<"Variable x = " << x << endl; #endif 如果在指令 #ifdef DEBUG 之前已经<em>定义</em>了符号常量 DEBUG,则会对程序<em>中</em><em>的</em> cerr <em>语句</em>进行编译。...不难理解,<em>C++</em> 预处理器把下面这行: cout << concat(x, y); 转换成了: cout << xy; <em>C++</em> <em>中</em><em>的</em>预<em>定义</em><em>宏</em> <em>C++</em> 提供了下表所示<em>的</em>一些预<em>定义</em><em>宏</em>: <em>宏</em> 描述 LINE

27330

#pragma once和条件编译

二、条件编译 #ifdef #ifdef 是 C 和 C++ 预处理器指令,用于条件编译。它用来检查是否已定义了某个标识符(通常是),如果已定义则执行一段代码,否则忽略这段代码。...编译器会按顺序检查每个条件,如果条件真(即定义),则执行相应代码块,并跳过后续条件。如果没有条件真,则执行 #else 后面的代码块(如果存在)。...但需要注意是,#pragma once 是编译器扩展,不是标准 C/C++ 语法,因此可能不是所有编译器都支持。...需要注意是,#pragma once 是编译器扩展,不是标准 C/C++ 语法,因此可能不是所有编译器都支持。...但是,大多数主流编译器( GCC、Clang 和 MSVC)都支持 #pragma once,因此在实际项目中,它通常是一个方便且可靠选择。

12410
领券