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

C语言定义(#define定义常量​、#define定义​、 带有副作用参数、 替换规则、 函数对比)

一、#define基本语法 在C语言中,常量使用频率很高一个量。常量是指在程序运行过程中,其值不能被改变量。常量使用#define来定义。...使用#define定义常量也称为符号常量,可以提高程序运行效率。...Microsoft Word中对定义:“就是能组织到一起作为一独立命令使用一系列word命令,它能使日常工作变得更容易”。...三、#define定义常量用法 ①常量   我们最常使用#define用法就是用#define来定义一个符号常量,而要修改时,只需修改#define这条语句就行了,不必每处代码都修改 基本语法...//使用​ MALLOC(10, int);//类型作为参数​ //预处理器替换之后:​ (int )malloc(10 sizeof(int)); 和函数一个对比 今天就先到这了

20510

C语言中修改const int 定义常量()

真正让我懂了解释: volatile 指出 i是随时可能发生变化,每次使用时候必须从i地址中读取,因而编译器生成汇编代码会重新从i地址读取数据放在b中。...而优化做法是,由于编译器发现两次从i读数据代码之间代码没有对i进行过操作,它会自动把上次读数据放在b中。而不是重新从i里面读。...本来想测试第一次代码就写错 const int a=1; int *b = &a; 这样写会报错,因为a是常量所以不会让你去到地址应该用(int *)强制取其地址 //这次虽然定义对了,但是会发现...a和*c值却不一样是因为进行了优化直接重上次取得值取得(从上边解释中可以懂) #include int main(void) { const int a=1;...//这次结果都一样了 #include void b(int *a) { *a=*a+1; } int main() { volatile const int a=

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

GCC 龙芯 CPU定义

GCC 会为不同 CPU 架构预定义,如 __x86_64__ 代表Intel 64位CPU, __aarch64__代表 ARM64。...网上已经有文档对 GCC CPU 定义进行了总结。 这些预定义有什么用呢?我们在代码中可以判断出当前 CPU 架构,那么可以针对 不同CPU特性,进行优化实现。...例如RocksDB 对于获取当前时间,在 x86 平台上,会用到 Time Stamp Counter (TSC) 寄存器,使用 RDTSC 指令提取 TSC 中值。...网上没有搜到 GCC 对龙芯 CPU 预定文档说明,只能从源码中找答案: void loongarch_cpu_cpp_builtins (cpp_reader *pfile) { ......在暂时不知道龙芯是否支持RDTSC情况下,只能给出通用实现,以后再查龙芯CPU手册进行优化。

23110

简述C语言定义使用

1 概述 在工程规模较小,不是很复杂,与硬件结合紧密,要求移植性时候,可采用定义简化编程,增强程序可读性。 当作为常量使用时,C程序员习惯在名字中只使用大写字母。...简单定义 无参名后不带参数,其定义一般形式: #define 标识符 字符串 // 不带参数定义 #define MAX 10 注意:不要在定义中放置任何额外符号,比如"="或者尾部加...";" 使用#define来常量命名一些优点: 程序会更易读。...不要使用定义新类型名,应该使用typedef,否则容易造成错误。 给添加注释时请使用块注释(/* */),而不要使用行注释。因为有些编译器可能会把后面的行注释理解一部分。...尽量使用const取代定义符号常量

1.6K20

iOS学习——iOS (define)与常量(const)正确使用

概述   在iOS开发中,经常用到定义,或用const修饰一些数据类型,经常有开发者不知怎么正确使用,导致项目中乱用与const修饰。你能区分下面的吗?知道什么时候用吗?...avatar @"80" } NSLog(avatar);   这段代码会输出多少,我们将“avatar”定义为了60,然后在一个永远不会执行代码里面重新定义了“avatar”80...用“extern”定义常量必须也只能初始化一次,不满足必须以及只能一次条件那么编译器就会提醒你。在定义全局变量时候需要要注意你命名,你可以使用规定好前缀来命名。...我们一般用法是在.h文件中用extern申明一个常量名称,表示该常量可以让外部引用,然后在.m文件中对该常量进行初始化。...当全局变量使用static修饰时,其生命周期没有变,依旧是在程序结束时才销毁。但是其作用域变了。现在只限于申明它这个文件才可见。使用extern关键字无法引用这个全局变量。

1.7K30

C语言中定义使用

版权声明:本文博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。...本文链接:https://blog.csdn.net/solaraceboy/article/details/102729793 C语言中定义使用 三种类型预处理指令 定义 是比较常用一种预处理指令...带参数(函数式定义如下: #define EXAMPLE(x,y,z) 替换列表 注意:在名字和左括号之间没有空格。 优点: 程序可能会更快一些; 更同意。...缺点: 编译后代码通常会变大。 参数没有类型检查。 无法用指针来指向一个可能会不止一次地计算它参数。...\n",s) int main(int argc,char *argv[]){ int i = 4 , j = 5; char str[] = "Ivan"; PRINT_INT(i/j)

1.4K00

错误int定义Integer造成程序无限执行下去,被骂惨

当时真是脑袋翁一下,这是啥问题,报个错也行呀。在本地项目中跑跑试试看,还是没发现问题,依旧不打印执行完毕日志。...那我就看看是不是判断出问题了,在判断地方打印出前后比较值,发现从128开始,128!=128,返回false。 这是什么情况? ? 128!...我把int定义成了Integer。瞬间明白了为什么? 大家都知道Integer是有缓存,当数值在-128~127之间,是从缓存中取数据。 ? Integer缓存源码 这里给大家做个测试 ?...定义Integer ? 定义int 总结:还好当时知道Integer源码,看见128之后,想到了Integer缓存,不然真的得找一会原因了。...当你在面临压力面前还能心里不急躁去找bug是办不到,所以平时还是需要看看源码,另外,这纯是一种马虎行为,大家在平时开发一定要注意下。

45710

Effective C++ 第一章重点条款学习

int a; int s[a]; 此时s[a]肯定报错了,为了解决这种问题,可以使用枚举: enum {a=5}; int s[a]; inline函数替代函数 inline关键字用来建议编译器把某频繁调用函数当做内联函数...a:b); } 这样就避免了前面替换被累加两次问题. 总结:对于常量,原先写用const或者enum来替换,函数用inline修饰函数!...类型声明一部分,它不是定义出来变量,所以不能取地址 #define出来,它是预处理东西,预处理后编译阶段已经不存在,所以也不可能获取地址 条款3:尽可能使用const关键字 这一节内容详细见下面...非本地静态对象(non-local static object): 静态对象可以是在全局范围定义变量,在名空间范围定义变量,函数范围内定义static变量,类范围内定义static变量,而除了函数中静态对象是本地...换句话说, non-local static 对象被 local static 对象替换了。 解决方法: 将全局变量变为本地静态变量 使用一个函数,只用来定义一个本地静态变量并返回它引用

1K10

《Effective C++》读书笔记(一):让自己习惯C++(条款01~04)

2.尽量以const、enum、inline替换#define 2.1 使用const来替换#define缘由 使用const来替换#define,是因为定义记号名称在编译器开始处理源码时候就已经被预处理器移走...: ①让常量作用域限制于类中   ②确保此常量只有一份,因此使用static 2.3 使用inline替换#define缘由 “对于形似函数,最好改用inline函数替换#define”...对于一些函数来说,我们想要提高效率,使用定义固然是可以提高效率,但是使用可能会导致计算出来结果是不对! 比如下面这段代码: #define Compare_ab(a,b) ((a)>(b)?...这显然不符合我们预期。因此,我们如果想要得到拥有一样效率,也想得到正确结果,那么就使用内联函数。 inline int f(int a, int b) { return a > b ?...幸运是,我们可以解决这个问题,办法就是:专门non-local static对象写一个函数,然后引用返回这个对象!这样,用户调用这个函数,从而拿到了这个对象。

18910

学过 C++ 你,不得不知这 10 条细节!

解决之道:以 const 定义一个常量替换上述(#define) 作为一个语言变量,下面的 const 定义常量 Pi 肯定会被编译器看到,出错时候可以很清楚知道,是这个变量导致问题: const...,所以对于 class 专属常量,应避免使用定义。...对于类里要定义专属常量时,我们依然使用 static + const,形式如下: class Student { private: static const int num = 10;...int scores[num]; }; const int Student::num; // static 成员变量,需要进行声明 如果不想外部获取到 class 专属常量内存地址,可以使用 enum...避免“跨编译单元之初始化次序”问题,请以 local static 对象替代 non-local static 对象。

70220

深刻理解----修饰变量----关键字

使用介绍 ①全局变量 在一个源文件里定义了一个变量,int i = 0; 在另一个文件里用 extern int i;就可以访问同一个变量i; ②全局常量 在一个源文件里定义了一个常量int const...i = 0; 在另一个文件里用 extern const int i;就可以访问同一个常量i; ③坑 不能有重复定义全局变量----不能在两个文件定义一样变量 即不能在两个文件中,int i =...0;或者int const i = 0; 如果全局变量被修饰全局常量,那么也应该应用全局常量---加const 2.定义 #define 定义又称为代换、替换,简称“”。...- (4)定义末尾不加分号; - (5)定义写在函数花括号外边,作用域其后程序,通常在文件最开头。...关键字 不能被外界引用,而且是常量 防止重复定义

679110

define与const关键字多种用法

define 在C语言中,#define 是一个预处理指令,用于创建定义(Macro Definition)。定义是一种文本替换机制,允许你在代码中使用标识符来代替一段文本。...1. define #define 一般语法如下(了解即可): 1.定义常量 2.创建函数式 3.定义条件编译标志 4.字符串化 5.连接 1.1 定义常量 #define PI...2. const 以下是几种const关键字用法: 1. 定义常变量 2. 定义常量指针 3. 用来指向常量指针 4. 定义常量成员函数 5. 定义常量引用参数 6....2.6 定义常量引用参数 void MyFunction(const int& value) { // 不能修改传入参数 } 函数参数前const关键字表示传入参数是一个常量引用,函数内部不能修改这个参数值...define用于定义,而也可以用于定义常量

7210

C++基本语法

b){ return a+b; } 因为定义会对文本替换,一般用于定义常量等,为了避免重复定义,c++提供了#ifndef(if not define缩写)命令来判断当前是否进行了某个名称定义...#endif 以上代码代表如果没有定义过eetal这个变量,则会执行#ifndef和最近endif之间代码 类型别名 与定义类似的,c++还提供了typedef可以对类型取别名和定义一些函数指针别名...((a)) sa = a;//equals to int & sa = a; 上述代码代表sa类型 a类型 引用类型,即变量sa此时是a一个引用 const与mutable const const...代表常量定义(java里final),不可修改。...,每次从内存读取 volatile int a; thread_local 用于创建存放在当前线程作用域对象,该对象存放在当前线程内存,在当前线程存活时间里保持存活 thread_local int

99820

C++基础语法重点总结

比如 int a = 10; int& ra = a; 在定义时候必须进行初始化,而且初始化后不能改变引用对象。 说一说引用和指针区别 ①引用定义时必须初始化,而指针不需要。...说一说优缺点,有什么解决办法 优点是增强代码复用性,比如用定义一个常量,那么在后续代码中我或许需要多次用到这个常量。还有就是可以提高性能。...比如需要实习一些简单加减功能函数,可以使用定义,就避免了函数栈帧开销,提高性能。 缺点是不方便调式,因为在编译期间进行了替换。代码可读性比较差,展开后代码可能会变得复杂,冗余。...0; } 解决办法是使用内联函数和常量定义,比如const、enum来替换。...const关键字 说一说const关键字 const除了上述,可以使用const来替换定义,因为const常量定义是可以进行类型检查、并且具有作用域。

17930

C++常量const建议收藏

大家好,又见面了,我是全栈君 常量折叠概念   常量折叠表面上效果和替换是一样,只是“效果上是一样”,而两者真正区别在于,是字符常量,在预编译替换完成后,该名字会消失,所有对引用已经全部被替换为它所对应值...void const_test() { int i0 = 11; const int i=0; //定义常量i int *j = (int *) &i;...%d\n%d\n%d\n”,&i,j,0,*j) (3)对可折叠常量引用会被替换为该常量值,而对变量引用就需要访问变量内存 const在集合中错误使用   const可以用于集合,但编译器不能把一个集合存放在它符号表里...,在上面的非法定义里,编译器给出提示是因为它不能再数组定义里找到一个常量表达式。...,所以C编译器不指定它在编译时值 const int buffsize;   上面的代码在C中可以,因为在C中默认const外部链接,C++默认const内部链接,所以再C++中要写成extern

28430

const关键字应用总结

1 概述 C++中const关键字用法非常灵活,而使用const将大大改善程序健壮性,通过查阅资料,将const作用归纳如下: 可以定义const常量 const int Max = 10; 便于进行类型检查...} //如果在函数体内修改了i,编译器就会报错 可以很方便地进行参数调整和修改 同定义一样,可以做到不变则已,一变都变 函数重载提供了一个参考 class A { void f(int...,而#define定义常量在内存中有若干个拷贝 #define PI 3.14159 //常量 const doulbe Pi=3.14159; //此时并未将Pi放入ROM中 double...提高了效率 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间常量,没有了存储与读内存操作,使得它效率也很高 2 const使用 定义常量 const...函数中使用const const修饰函数参数 传递过来参数在函数内不可以改变(无意义,因为Var本身就是形参) void function(const int Var); 参数指针所指内容常量不可变

49410

使用xib自定义UIcollectionViewCell控件nil问题

该怎么说呢,这是一个很坑事情,今天在完成一个界面的时候,用了xib来自定义UICollectionViewCell。...mainBundle]]; [_collectionView registerNib:nib forCellWithReuseIdentifier:@"MyCollectionCellID"]; //使用集合视图单元格...forIndexPath:indexPath]; cell.dataDic = self.itemList[index]; return cell; } 但是问题是,在这些过程完成之后,自定义单元格对象...回想一下编码过程,我刚开始使用了autolayout,后来没有使用了,我想可能就是因为反复修改之后编译缓存带来问题。 唉,不得不说xocdebug还是不少,在这里记下这个坑,希望对大家有用。...如果在此之后上面的控件仍然nil, 那么,亲,你是真的写错了代码。。。。

1.2K50

c++该怎么学习(面试吃土记)

旁白:内心崩溃 知识点1 :#define 优缺点 并不是函数,并不是语句,并不是类型定义 并不是函数,并不是语句,并不是类型定义 并不是函数,并不是语句,并不是类型定义 对话:...小王提问:与const 不同东西,怎么有区别呢,对题目产生疑问? 旁白:一片汪洋大海,那是哪呀 老王: 可以修饰常量 const修饰常量 相同点。...探究C++类成员函数编译次序 C语言函数编译次序:从上到下依次编译,当遇到在函数内部使用其他函数名字时,将会在此函数之前查找,若有函数声明或者定义则编译成功,反之编译失败。...https://www.zhihu.com/question/37029880 C++ 可重定位目标模块(即. o 文件)中有个符号表,包含本模块所有定义引用符号信息。...全局符号指本模块定义非静态函数和全局变量,其他模块可见,可以供其他模块使用。 本地符号指静态函数和静态变量,只能供本模块使用,其他模块不可见。

65320

C++常见问题(三)——定义、const、static、sizeof相关实例

第一部分 定义   定义语法格式:#define ,其中标识符就是所谓符号常量,也称为”名”。预处理工作也叫展开。定义不占用内存和编译时间。...#define ARR_SIZE(a) ((sizeof(a))/(sizeof(a[0]))) 第二部分 const使用 const作用: 1.const用于定义常量 2.const修饰函数形式参数...:将输入参数用户自定义类型和抽象数据类型时,将值传递改为“const &传递”可以提高效率。   ...3.const修饰函数返回值 4.const修饰类成员函数:任何不需要修改数据成员函数都应该使用const修饰,int GetCount(void) const; 例题4:const使用 int...在int*左侧,用来修饰指针所指向变量,即指针指向常量

1.3K100
领券