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

C语言 “入门” 章节全知识点

sizeof(int) 类型用法 变量与常量 三.常量与变量 变量和常量 (数据类型复习 ) 变量分为 局部变量 和 全局变量 {是局部变量}外全局变量 全局变量和局部变量可以同时定义 但 局部变量优先...· 生命周期 局部变量 全局变量 局部变量定义域是变量所在局部范围 当a在内时仅显 在外都现 全局变量作用域是整个工程 生命周期 例如 中 只有在第二个括号中 a 存在数 当在括号外面的时候...修饰a 本质是变量 但是不能被修改 有常量属性 创建数组 int arr[10] = {0}; Define 定义标识常量 而 define 定义是全局常量 枚举常量 六.字符串 字符串 “hello...C语言是结构化程序设计语言 一般有 -顺序结构 -选择结构 -循环结构 比如求和代码 中 定义了add函数 Add 执行 x+y=z 之后 返回 z结果 Add只是个名字 括号是参数 大括号是函数体...Register 寄存器 一个电脑上存储空间和设备都有哪些 Define 定义 定义标识符常量 Define 定义 十五.指针 指针 内存会划分为一个个内存单元(一个字节) 每个内存单元都有一个编号

11310

C++中常量与关键字

定义 #define 和常量 const 区别类型和安全检查不同定义是字符替换,没有数据类型区别,同时这种替换没有类型安全检查,可能产生边际效应等错误;const常量常量声明,有类型区别,需要在编译阶段进行类型检查编译器处理不同定义是一个..."编译时"概念,在预处理阶段展开,不能对定义进行调试,生命周期结束与编译时期;const常量是一个"运行时"概念,在程序运行使用,类似于一个只读行数据存储方式不同定义是直接替换,不会分配内存,存储于程序代码段中...<<endl; //正确,N已经定义过,不受定义域限制 cout<<n <<endl; //错误,n定义域只在f1函数中}定义后能否取消定义可以通过#undef来使之前定义失效const常量定义后将在定义永久有效...void f1(){ #define N 12 const int n = 12; #undef N //取消定义后,即使在f1函数中,N也无效了 #define N 21//取消后可以重新定义...}是否可以做函数参数定义不能作为参数传递给函数const常量可以在函数参数列表中出现

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

预处理指令、typedef、条件编译、多文件代码

} 在Visual Stduio 2019中,覆盖定义并不会导致编译报错而停止 不过,更妥当做法是:使用预处理指令#undef,取消这个定义,再重新定义它。...若定义了该,则保留指令块代码。否则,则删除代码块代码。 图片 与之相反,#ifndef指令是if和not defined缩写,意为是否未定义了某某。 若定义了该,则删除指令块代码。...这样依然会导致头文件person.h被重复包含问题。并且,若嵌套层次更加复杂,会比较难排查。 头文件守卫 借助条件编译,使同一个头文件,只允许被包含一。 添加位置是在头文件。...因此,将保留从#ifndef PERSON_H开始,直到#endif代码。而这段代码定义**PERSON_H**。 第二包含时,预处理指令#ifndef测试到PERSON_H已经定义。...保证了,在一个文件,同一个头文件仅被包含一。 注意,这并不是意味着这个头文件不能再被其他文件包含了。由于,定义作用域是文件作用域。头文件守卫仅保证在该文件,一个头文件只能被包含一

1.2K00

预处理指令、typedef、条件编译、多文件代码

} 在Visual Stduio 2019中,覆盖定义并不会导致编译报错而停止 不过,更妥当做法是:使用预处理指令#undef,取消这个定义,再重新定义它。...若定义了该,则保留指令块代码。否则,则删除代码块代码。 与之相反,#ifndef指令是if和not defined缩写,意为是否未定义了某某。...这样依然会导致头文件person.h被重复包含问题。并且,若嵌套层次更加复杂,会比较难排查。 头文件守卫 借助条件编译,使同一个头文件,只允许被包含一。 添加位置是在头文件。...因此,将保留从#ifndef PERSON_H开始,直到#endif代码。而这段代码定义**PERSON_H**。 第二包含时,预处理指令#ifndef测试到PERSON_H已经定义。...保证了,在一个文件,同一个头文件仅被包含一。 注意,这并不是意味着这个头文件不能再被其他文件包含了。由于,定义作用域是文件作用域。头文件守卫仅保证在该文件,一个头文件只能被包含一

1K40

一文搞懂宏程序编程基础,快速入门秘笈

2)普通程序中,只能指定常量常量之间不能运算,程序只能顺序执行,不能跳转,因此功能是固定,不能变化。...(3)系统变量:由后跟4位数字来定义,它能获取包含在机床处理器或NC内存中只读或读/写信息,包括与机床处理器有关交换参数、机床状态获取参数、加工参数等系统信息。 5....L(重复次数) 注:每次调用都要重新写G65标准格式,用后自动取消。...G67宏程序模态调用宏程序取消。 7.宏程序可以用G×× 格式调用: 说明:程序号用O9010~O9019; 将程序号对应参数设置为G代码数值; 调用形式为:G(参数设定值) 。...计算:遵循通常数学运算规则,括号优先,乘除优先与加减。

1.8K90

C语言基础系列: 预处理+文件操作

#define 是C语言定义,本质是替换,会在预处理阶段对程序中所有出现"名"地方进行替换 一 替换 1.定义 #define 名 内容 #define PI 3.14159 //定义PI...语法: #ifdef 名 代码块; #endif 规则: 根据名是否定义,如果定义了,就会执行代码块直到endif,否则不执行代码块 举例: #include #define def_...def_1 printf("以定义名 def_1"); // 结果 #else printf("未定义名 def_1"); #endif return 0; } 二 #ifndef...名 语法 #ifndef 名 代码块; #else 代码块; #endif 规则: ( 与 ifdef 类似且相反 ) 根据名是否定义,如果没有定义,就会执行相对代码直到endif...// 判断是否定义名 def_1 printf("未定义名 def_1"); #else printf("以定义名 def_1"); // 结果 #endif return 0;

1.5K50

预处理命令

,不管是在某个函数,还是在所有函数之外(不太建议把#define写在函数),#define作用域都是从定义开始直到整个文件结尾(这一点和typedef就区别很大) #define(定义)----由预处理器来处理...: typedef: 如果放在所有函数之外,它作用域就是从它定义开始直到文件尾 如果放在某个函数,它作用域就是从它定义开始直到该函数结尾 #define: 不管是在某个函数,还是在所有函数之外,...,到了编译阶段是没有存在,它在预编译阶段就被处理了 #undef 上文提到#define作用域是从它声明开始到文件结尾,#undef就是取消之前定义(也就是#define标识符) 格式:...#if命令要求判断条件为整型常量表达式,也就是说表达式中不能包含变量,而且结果必须是整数;而if后面的表达式没有限制,只要符合语法就行,这是#if和if一个重要区别 #ifdef #ifdef作用是判断某个是否定义...,还是加上括号比较好) 上文提到有#ifdef、#ifndef来判断名是否被定义,乍一看defined有点多余,其实不然,#ifdef和#ifndef仅能一判断一个名,而defined能做到一判断多个

75031

C语言进阶——程序环境和预处理

,顺序不要写反了,先写标识符,再写常量值 #define 定义标识符常量时,不能在后面加 ; 号,这是非常坑爹写法! ...2.2.2、定义 #define 定义符号时,不带参数时是在定义标识符常量,带参数时就是在定义(有点像函数),关于和函数比较,后面会专门讲(很详细!).../取消定义标识符 MAX printf("%d\n", MAX); #undef ADD //取消定义 ADD printf("%d\n", ADD(2, 3)); return 0; }...,只会选择一个通道进行编译    注意:在使用多分支编译语句时,逻辑要严谨,设计要合理  2.6.3、判断是否定义   我们可以定义取消,还可以判断是否已定义 语法: #if defined...#include //库函数头文件包含风格 #include"Add.h" //自定义头文件包含风格 2.7.3、避免多次展开同一头文件   头文件在被成功调用后,在预编译阶段会被展开

19020

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

取消定义: #define [MacroName] [MacroValue] //定义 #undef [MacroName] //取消 定义必须写在函数外...程序首行定义NUM为字符串“OK”,其实可为任何字符串,甚至不给出任何字符串,即#define NUM也具有同样意义。只有取消程序首行定义才会去编译第二个printf语句。...CAPITAL_LETTER为1,因此在条件编译时常量表达式CAPITAL_LETTER值为真(非零),故运行后使小写字母变成大写(C LANGUAGE)。...即在一处将常量数值定义,其他地方通过引用该,生成自己模块。严禁相同含义常量数值,在不同地方定义为不同,即使数值相同也不允许(维护修改后极易遗漏,造成代码隐患)。 3....2) 存在一个独立代码块,可进行变量定义,实现比较复杂逻辑处理。 注意,该代码块(即{…})定义变量其作用域仅限于该块。

2.6K10

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

,使得我们自己定义记号名称不能进入记号表,导致后续运用这个常量时候出现编译错误让我们满脸疑惑。...: ①让常量作用域限制于类中   ②确保此常量只有一份,因此使用static 2.3 使用inline替换#define缘由 “对于形似函数,最好改用inline函数替换#define”...对于一些函数来说,我们想要提高效率,使用定义固然是可以提高效率,但是使用可能会导致计算出来结果是不对! 比如下面这段代码: #define Compare_ab(a,b) ((a)>(b)?...确定对象被使用前已经被初始化 先来说说几个概念: ①static对象:生命周期随程序结束而结束,这种对象包括全局global对象、定义在namespce作用域对象、在类,在函数、以及在文件file...原理是:C++中,函数local static对象会在该函数被调用时候,并且首次遇上该static对象定义时候就会将其初始化!这样,就能保证拿到tfs是已经被初始化了

18810

【C语言】C语言入门知识

4.3 常量 C语言中常量分为字面常量,const修饰常变量,#define 定义标识符常量,枚举常量。 (1)字面常量:100,'w',3.14等。...修饰局部变量-称为静态局部变量---使局部变量出了作用域不会销毁,使局部变量生命周期变长 如: void test() { static int a = 1; //如果不加static...修饰全局变量-称为静态全局变量---使静态全局变量只能在自己所在源文件内部使用,出了源文件就没法使用了 3....修饰函数-称为静态函数---改变了函数链接属性(让函数只能在自己所在源文件内部使用) 九、#define定义 9.1 定义 //define定义标识符常量 #define MAX 1000...//define定义 #define ADD(x, y) ((x)+(y)) int main() { int sum = ADD(2, 3); printf("sum

9310

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

(4)同一软件产品内模块之间接口部分标识符名称之前加上模块标识。 2.2 常量命名 常量用全部大写字母来命名,词与词之间用下划线分隔。...其程序块结束行"}"右方应加表明该程序块结束标记"end of……", 尤其在多重嵌套时。 3.4 变量、常量注释 同一类型标识符应集中定义,并在定义之前一行对其共性加以统一注释。...② #define用法 #define为一定义语句,通常用它来定义常量(包括无参量与带参量),以及用来实现那些“表面似和善、背后一长串”,它本身并不在编译过程中进行,而是在这之前(预处理过程)...(仅仅只是个别名),而#define原本在C中是为了定义常量,到了C++,const、enum、inline出现使它也渐渐成为了起别名工具。...为了尽可能地兼容,一般都遵循#define定义“可读”常量以及一些语句任务,而typedef则常用来定义关键字、冗长类型别名。

1.7K20

替换、条件编译、头文件展开

// 取消 #if // 如果给定condition为真,则编译下面的代码 #ifdef // 如果定义,则编译下面的代码 #ifndef <#macro...这样,定义参数和#define定义可以包含其他#define定义符号。但是,不可以出现递归。...("10+20" " = %d\n", 10 + 20); 运算符 在定义时,经常会出现两个运算符 # 和 ## #:出现在定义#运算符,会将其后面参数转化为一个字符串。...①#include指令使另外一个文件被编译:预处理器先删除这条指令,并用包含文件内容替换。...这样一个文件被包含10,那就实际被编译10。 ②库文件一般用 包含;本地文件一般用 “ ” 包含。 ③文件开头写:#pragma once 可以避免头文件重复引入。

2.1K20

C语言:预处理详解

使用举例: 1、定义一个常量标识符。...2、⽤于对数值表达式进⾏求值定义都应该⽤这种⽅式加上括号,避免在使时由于参数中 操作符或邻近操作符之间不可预料相互作⽤。...四、带有副作用参数 当参数在定义中出现超过⼀时候,如果参数带有副作⽤,那么你在使⽤这个时候就可 能出现危险,导致不可预测后果。副作⽤就是表达式求值时候出现永久性效果。...每次使时候,⼀份定义代码将插⼊到程序中。除⾮⽐较短,否则可能⼤幅度增加程序 ⻓度。 2. 是没法调试。 3. 由于类型⽆关,也就不够严谨。 4....它在自己作用域给一个已经存在类型一个别名,但不能在一个函数定义里面使用typedef。用typedef定义数组、指针、结构等类型会带来很大方便,不仅使程序书写简单,也使意义明确,增强可读性。

17810

【C语言】一篇文章深入解析联合体和枚举且和结构体区别

前言 联合体(union)是允许一个变量通过不同接口访问内存一种数据类型,表示一个变量可以存储不同类型值,而枚举是使用enum关键字定义一组相关且互斥整形常量集合。...联合体⼤⼩计算 点击可以查看结构体内存对齐规则——>【C语言】自定义类型:结构体深入解析(二)结构体内存对齐&&offsetof计算偏移量&&结构体传参 联合体大小计算规则: 联合⼤⼩⾄少是最...联合体对齐规则与结构体相似: 点击可以查看结构体内存对齐规则——>【C语言】自定义类型:结构体深入解析(二)结构体内存对齐&&offsetof计算偏移量&&结构体传参 联合体应用 使⽤联合体是可以节省空间...在大括号{}列出枚举类型多个枚举常量,用逗号分隔。 变量是枚举类型变量,可以直接使用枚举类型名或枚举常量初始化。...便于调试,预处理阶段会删除 #define 定义符号 使⽤⽅便,⼀可以定义多个常量 枚举常量是遵循作⽤域规则,枚举声明在函数,只能在函数使⽤ 枚举类型使⽤ 那是否可以拿整数给枚举变量赋值呢

17610

基础知识 | 每日一面(67)

古代剑客们与 对手相逢时,无 论对手多么强大, 明知不敌,也要亮出自己剑! 读者:能否混用旧式和新型函数语法? 小林:这样做是合法。但是, 现代做法是在声明和定义时候都是用原型形式。...旧式语法被认为已经废弃, 所以某一天对它官方支持可能会取消。 读者:为什么声明 extern int f(struct x *p); 报出了一个奇怪警告信息 “结构 x 在参数列表中声明”?...小林:与C语言通常作用范围规则大相径庭是, 在原型中第一声明 结构不能和同一源文件中其它结构兼容, 它在原型结束出就超出了作用范围。...要解决这个问题, 在同一源文件原型之前放上这样声明:struct x;它在文件范围提供了一个不完整结构 x 声明, 这样, 后续用到结构x声明至少能够确定它们引用是同一个结构 x。...因此用 const 限定对象值并不完全是一个真正常量。在这点上 C 和 C++ 不一样。如果你需要真正运行时常量, 使用预定义 #define(或enum)。

3063129

⭐️ 关键字深度剖析 ⭐️第七章(关键字volatilestructunionenumtypedef)

1 可以人为设定枚举成员值,从而自定义某个范围整数 enum 与 #define 区别 define是在预处理阶段直接进行替换,并且不进行类型检查,存储在代码段 枚举则是在程序运行之后才起作用...1;#define则不会 枚举可以一定义大量相关常量,而#define只能定义一个 一般在编译器里,可以调试枚举常量,但是不能调试常量 枚举量具有类型,没有类型,枚举变量具有与普通变量相同性质...(如作用域等)而没有 枚举常量属于常量定义不是常量 关键字-typedef ---- 定义: 作用是为一种数据类型(内置数据类型/自定义(struct))定义一个新名字 typedef 与...#define区别 #define 进行简单进行字符串替换, #define 定义可以使用 #ifdef、#ifndef 等来进行逻辑判断,还可以使用 #undef 来取消定义 typedef 是为一个类型起新名字...,typedef 符合(C语言)范围规则,使用 typedef 定义变量类型,其作用范围限制在所定义函数或者文件(取决于此变量定义位置) 示例: typedef char* pStr1; #define

31020
领券