C语言关键字_record

2023-05-16

重要关键字

涉及流程和单数据类型的关键字,功能一般都比较简单,在使用过程中很快就会熟悉。下列关键字相对前者来说,功能较多,值得好好学习。

extern 实现外部链接

修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。

1.extern放在变量之前 可以在函数外声明变量,作用域为文件作用域;在函数内声明也可以,作用域为函数作用域。只是声明;在extern使用初始化声明变量时,也将其视为变量的定义,不过编译器会报warning,运行ok。
2.extern放在函数前面 表明函数为外部函数,作用于文件间。C语言规定函数前的extern可以忽略。
3.extern “C” 声明C风格代码

c关键字详解
https://www.cnblogs.com/chaoyueziwo/p/4118906.html
extern “C”
https://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html


static 实现内部链接

static可以修饰函数,全局变量和局部变量。
1修饰函数 改变函数的作用域为 文件作用域,只在该源文件内可用;函数默认文件间共享,作用域为整个源程序。
2修饰全局变量 修改全局变量的作用域为 文件作用域;全局变量作用域默认为整个源程序,在所有的源文件中都有效。
3修改局部变量 存储方式从自动变量变为静态变量,改变其生存周期从局部 变为 整个 程序运行期。

静态变量只会初始化一次,反复调用某个函数中的静态局部变量,会不停修改其数值。

static有三个总要的作用
1.隐藏,对全局变量和函数而言,隐藏在文件内
2.保持变量内容的持久
3.默认初始化为0 和全局变量类似。 在静态数据区,内存中所有的字节默认值都是0x00
在这里插入图片描述

这两篇文章写得挺好的,看完可以自己总结下,转化为自己的知识。
https://blog.csdn.net/qq_37858386/article/details/79064900‘
http://c.biancheng.net/view/301.html

讲链接性的文章
https://zhuanlan.zhihu.com/p/260777861
1.链接:链接描述了名称在整个程序或一个翻译单元中如何引用或不引用同一实体。
2.只有在链接过程开始时,链接属性才起作用

作用域和链接属性
https://www.cnblogs.com/Black-Cobra/p/10072751.html


const 限定一个变量的值为只读

1.限定一个变量不允许被改变
2.const用在了函数形参中的时候,避免在函数中对变量做了修改
3.函数前用const修饰。返回的值不可被修改
4.有些全局变量是不希望在使用的过程中修改的,那么用const修饰可避免过程中被修改

const修改的变量需要初始化值。
其本质并不是常量。
const使用的基本形式: const type m修饰的对象是m;故const type *pm中 const修饰*pm

参考
https://blog.csdn.net/ziyuzhao123/article/details/18662207
问题1的例子不会编译报错,C99有可变长度数组。


次重要关键字

typedef 自定义类型别名

四种应用场景:
1.简单数据类型
2.自定义数据类型 struct union enum
3.数组和指针
4.函数指针

参考
http://c.biancheng.net/view/298.html

sizeof 获取字节长度 返回值为size_t

C语言的一种单目操作符。获取操作数的存储大小
1、用于数据类型 
2、用于变量

sizeof有三种语法形式,如下:

  1. sizeof( object ); // sizeof( 对象 );
  2. sizeof( type_name ); // sizeof( 类型 );
  3. sizeof object; // sizeof 对象; 这个确实可以啊,有趣,仅对象(变量)可用。

当操作数是联合类型时,sizeof是其最大字节成员的字节数。
当操作数是结构类型时,sizeof是其成员类型的总字节数,包括补充字节在内。(字节对齐)
sizeof的计算发生在编译时刻,所以它可以被当作常量表达式使用。如char ary[ sizeof( int ) * 10 ];
sizeof操作符不能用于函数类型,不完全类型或位字段。

不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等

可以用于函数 GNUC gcc 7.5.0,不会报错诶,不过f的长度为1,有点意思
在这里插入图片描述
也是1。
在这里插入图片描述
C99和C11在printf提供%zd输出,sizeof()获取的值。有趣的知识点。


struct 定义结构体

结构体会字节对齐

union 定义联合体

音视频算法方面联合体是一个应用。
联合体可以不用考虑数据类型转换,但是要考虑大小端的情况。
不太懂哦~感觉挺多地方可以灵活运用这个东西。等遇到再写写吧。

enum 定义枚举类型

枚举型是预处理指令#define的替代,枚举和宏其实非常类似,宏在预处理阶段将名字替换成对应的值,枚举在编译阶段将名字替换成对应的值。枚举量是常量。
https://www.cnblogs.com/lanhaicode/p/10620028.html


register 寄存器变量

修饰符暗示编译程序相应的变量将被频繁地使用,如果可能的话,应将其保存在CPU的寄存器中,以加快其存储速度。
声明为寄存器变量,但是实际执行看系统。
https://blog.csdn.net/21aspnet/article/details/257511

volatile

volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。
偏底层和硬件方面会用到这个关键字。
https://blog.csdn.net/lwbeyond/article/details/7265430


C语言数据类型

在这里插入图片描述
图片来自:https://blog.csdn.net/snake_lp/article/details/78631263


关键字汇总

这个链接罗列得非常清楚,大赞~ 借鉴一下
https://zhuanlan.zhihu.com/p/77474834

C语言关键字
auto:声明自动变量;
break:跳出当前循环;
case:开关语句分支;
char:声明字符型变量或函数返回值类型;
const:声明只读变量;
continue:结束当前循环,开始下一轮循环;
default:开关语句中的“默认分支”;
do:循环语句的循环体;
double:声明双精度浮点型变量或函数返回值类型;
else:条件语句否定分支(与if连用);
enum:声明枚举类型;
extern:声明变量或函数是在其它文件或本文件的其它位置定义;
float:声明浮点型变量或函数返回值类型;
for:一种循环语句;
goto:无条件跳转语句;
if:条件语句;
int:声明整型变量或函数;
long:声明长整型变量或函数返回值类型
register:声明寄存器变量;
return:子程序返回语句(可以带参数,也可不带参数)
short:声明短整型变量或函数;
signed:声明有符号类型变量或函数;
sizeof:计算数据类型或变量长度(即所占字节数)
static:声明静态变量;
struct:声明结构体类型;
switch:用于开关语句;
typedef:用以给数据类型取别名;
unsigned:声明无符号类型变量或函数;
union:声明共用体类型;
void:声明函数无返回值或无参数,声明无类型指针;
volatile:说明变量在程序执行中可被隐含地改变;
while:循环语句的循环条件;
asm:用于在C语言中嵌入汇编指令;
fortran:为Fortran语言链接而设定的条件性支持类型指令符。

1999年12月16日,ISO推出了C99标准,该标准新增了6个C语言关键字。
inline:用来定义一个类的内联函数,引入它的主要原因是用它代替C中表达式形式的宏定义;
restrict:只可以用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式。即所有修改该指针指向内存中内容的操作都必须通过该指针来修改,而不能通过其它途径(其它变量或指针)来修改,这样做的好处是,能帮助编译器进行更好的优化代码,生成更有效率的汇编代码;
_Bool:布尔类型的数据,其值为0或1,主要用来判断条件能否成立的真假;
_Complex:用来表示复数类型;
_Imaginary:用来表示虚数类型;
_Pragma:与#pragma指令相同的功能。

2011年12月8日,ISO发布C语言的新标准C11,该标准新增了7个C语言关键字。
_Alignas:指定某个变量按照其他数据类型对齐;
_Alignof:指定数据类型内存对齐的字节数;
_Atomic:原子类型说明符和限定符;
_Static_assert:声明在编译时有效,它将测试由用户指定且可以转换为布尔值的整数表达式表示的软件断言。如果表达式的计算结果为零(false),编译器将发出用户指定的消息,并且编译因错误而失败;
_Noreturn:表明调用完成后的函数不返回主调函数,目的是告诉用户和编译器,这个特殊的函数不会把控制返回主调程序,告诉用于以免滥用该函数,通知编译器可以优化一些代码。
_Thread_local:它会影响变量的存储周期,被修饰的变量具有线程周期,这些变量在线程开始的时候被生成,在线程结束的时候被销毁。并且每一个线程都拥有一个独立的变量实例。可以和static和extern关键字联合使用,这将影响变量的链接属性;
_Generic:可以简单地将一组具有不同类型却有相同功能的函数抽象为一个统一的接口。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言关键字_record 的相关文章

  • 【record】2、使用非官方遥控器适配prometheus的驱动修改

    0 前言 xff1a prometheus V2推荐使用阿木的遥控器 但是家里遥控器实在太多了 xff0c 所以就尝试修改一下prometheus里关于joystick的驱动 xff0c 使其适配prometheus的控制 xff1b 本篇
  • Record: My CMakeLists

    1 设置需要的最小版本的cmake cmake minimum required VERSION 3 10 2 定义生成的项目名 project perceive tracking 3 1 设置cmake参数 set CMAKE CXX F
  • 【VCU】详解S19文件(S-record)

    目录 1 概述 2 S record格式 3 S record类型 4 S19文件示例 5 校验和计算示例 6 参考 1 概述 Motorola S record是由Motorola创建的一种文件格式 xff0c 它以 ASCII十六进制
  • Delphi中简单的读/写记录.dat文件

    由于某种原因 即使我昨天使用过 我的 OpenID 帐户也不再存在 但不管怎么说 我需要将记录数据保存到 dat 文件中 我尝试了很多搜索 但都是与数据库和BLOB的东西有关 我无法从中构建任何东西 我有以下记录 type Scores r
  • 我想在 React 的画布上录制视频

    我查了很久 觉得有必要在这里问一下 我之前使用的 npm 包什么也没做 有人曾经做过或经历过这样的应用吗 我想做的就是在画布元素上绘图时将其录制为视频 提前致谢 是的 您可以使用媒体流 捕获流 and 媒体记录器为了那个原因 下面是一个示例
  • Hibernate多对多,重复相同的记录

    我尝试使用注释进行 Hibernate 映射多对多 并使用 vaannila 中给出的示例 http www vaannila com hibernate hibernate example hibernate mapping many t
  • 在 Android 中录制声音并读取振幅

    我正在尝试制作一个应用程序 记录声音一秒钟 然后从记录的声音中读取最大幅度 这是我到目前为止所拥有的 但我的应用程序崩溃了 我不明白为什么 这是我的第二个活动 我在按下 记录 按钮后从第一个活动中调用该活动 该应用程序在我的模拟器和手机上崩
  • 使用 fastxml.jackson 将 JSON 解析为 Java 记录

    根据设计 Java 记录不能从另一个对象继承 请参阅为什么Java记录不支持继承 所以我想知道实现以下目标的最佳方法是什么 鉴于我的 JSON 数据包含具有一些通用数据 独特数据的对象 例如 类型 宽度和高度适用于所有形状 但根据类型 它们
  • Java 录制/混合两个音频流

    我有一个java应用程序 它记录来自混音器的音频并将其存储在字节数组中 或将其保存到文件中 我需要的是同时从两个混音器获取音频 并将其保存到音频文件 我正在尝试使用 wav 问题是我可以获得两个字节数组 但不知道如何合并它们 合并 我并不是
  • MongoDB:文档、记录和属性之间有什么区别?

    有关的文档文件 http docs mongodb org manual core document 似乎更喜欢 文档 一词 也指 数据库记录 在其他地方 有能力的 MongoDB 开发人员显然可以互换使用 属性 https github
  • android AudioRecord 从 MIC 读取幅度

    我正在尝试录制麦克风的声音并绘制实时图表 我能够记录并绘制图表 问题是使用下面的代码记录的值不准确 例如 下图是我在完全没有声音时得到的结果 我看过使用 fft 的示例 但我不确定这对我的情况是否有任何帮助 因为我正在尝试绘制时域图 并且我
  • R - 简单记录链接 - 下一步?

    我正在尝试与library RecordLinkage 所以我只有一个向量 tv3 c TOURDEFRANCE TOURDEFRANCE TOURDE FRANCE TOURDE FRANZ GET FRESH 我需要的功能是compar
  • 在 Haskell 类型类中记录选择器

    我想实施一个Type Class有几个默认方法 但我收到一个错误 我无法使用record selectors inside type classes定义 下面的代码基本上创建了type class它定义了add函数 它应该添加一个元素到re
  • Delphi - 按名称调用记录方法

    我为我的应用程序编写了一种脚本语言 我的目标是能够在脚本中发布来自 delphi 的任何类型 我使用 rtti 来自动执行此任务 对于任何实例类型 例如类 我使用以下代码从脚本查找并调用方法 var Info TRttiType Meth
  • AVAudioRecorder 内存泄漏

    我希望有人能在这件事上支持我 我一直在开发一个应用程序 该应用程序允许最终用户录制一个小音频文件以供以后播放 并且正在测试内存泄漏 当 AVAudioRecorder 的 停止 方法尝试关闭其正在录制的音频文件时 我仍然经常遇到内存泄漏 这
  • 如何仅在少数列中插入数据,而其他列为空或像它们在mysql表记录中一样?

    我创建了一个名为 学生 的表 它有以下字段 roll no lt type Integer Not Null course name lt type varchar 40 Not Null std surname lt type varch
  • Android:如何配置“tinymix”以使用“tinycap”录制系统音频

    在 Android 中 目前无法使用 Android SDK 录制系统音频 因此 我尝试了一下 TinyALSA 自 Android 4 起 希望可以重新路由音频输出 以便可以录制它 当我在设备上调用 tinymix 时 我得到以下配置 c
  • 公共记录类型的构造函数?

    假设我想要一个记录类型 例如 type CounterValues Values int list IsCorrupt bool 问题是 我想创建一个构造函数 将传递的整数列表转换为一个没有负值的新列表 它们将被 0 替换 并且仅当在构造时
  • 为 F# 记录值生成的 IntelliSense XML 不正确 (VS2013)

    Update 正如评论中指出的 这是一个错误 我有向微软报告了此事 https connect microsoft com VisualStudio feedback details 816006 incorrect intellisens
  • 当通过音频采样的数据数量超过 AudioRecord 构造函数中设置的“bufferSizeInBytes”时会发生什么?

    public AudioRecord int audioSource int sampleRateInHz int channelConfig int audioFormat int bufferSizeInBytes 这是公共构造函数Au

随机推荐

  • ros(13):ros找不到包报错及解决办法--Config.cmake

    目录 一 基础包 1 1 rospy包 1 2 tf包 1 3 grid map包 1 4 serial 二 专有包 2 1 dynamic reconfigure包 2 2 rosparam handler包 2 3 qt build包
  • 使用Java实现高效的字符串匹配算法

    摘要 xff1a 字符串匹配是计算机领域中的一个重要问题 xff0c 有着广泛的应用场景 在本篇博客文章中 xff0c 我们将介绍几种高效的字符串匹配算法 xff0c 并给出使用Java语言实现的代码示例 xff0c 希望能对读者理解和应用
  • WebDAV是什么

    WebDAV学习及使用 WebDAV是什么WebDEV怎么用各个设备连接1 Window2 MAC WebDAV是什么 基于Web的分布式编写和版本控制 xff08 WebDAV xff09 是超文本传输协议 xff08 HTTP xff0
  • 【计算机基础】整数的补码表示及负整数的左右移

    作者 xff1a LogM 本文原载于 https segmentfault com u logm articles xff0c 不允许转载 文章难免有错误之处 xff0c 请在原文评论处指出 1 补码的表示形式 计算机中整数用补码表示 举
  • Linux 获取内存页大小

    如何查看Linux系统的内存页大小 xff1a 1 getconf PAGESIZE PAGE SIZE 返回值单位为Bytes 点击 此处 折叠或打开 root 64 localhost nginx 1 8 0 getconf PAGES
  • Linux C++服务端开发教程(四) 内存泄露检查

    如何知道内存泄漏 我们如果不去特意查内存泄漏 xff0c 实际上是很难发现的 xff0c 因为这个程序即使发生内存泄漏 xff0c 他也不会有任何特征 泄漏速度不是很快 xff0c 知道某一天 xff0c 我们发现系统运行变慢了 xff0c
  • ubuntu18.04 docker开启2375远程端口

    docker开启2375端口 查询docker服务 查询docker服务 systemctl status docker service 可以看到 docker service 在 etc systemd system 目录下 xff0c
  • 【银河麒麟V10】【服务器】最小化系统安装桌面环境

    1 先制作本地镜像源 本地镜像源搭建方法可参考 xff1a 麒麟V10服务器搭建本地镜像源 https mp csdn net mp blog creation editor 120703047 2 安装桌面环境 yum grouplist
  • 第三方登录之数据库设计

    第三登录之数据库设计 现在很多网站和应用都会接入第三方登录来减少用户注册 xff0c 即方便又快捷 比如说qq登录 xff0c 微信 xff0c 新浪微博等方式 关于第三方登录数据库设计 xff0c 涉及到2张表的设计 xff0c 一张用户
  • 51单片机的定时器/计数器

    7 2 2 定时器 计数器的结构 51单片机的定时器 计数器结构如图7 7所示 T0由特殊功能寄存器TH0 TL0构成 T1由特殊功能寄存器TH1 TL1构成 T0 和T1都具有定时器和计数器两种工作模式 xff0c 4种工作方式 xff0
  • 汇编指令控制单片机LED灯

    一 点亮LED灯 简单的对P1口进行操作就可以了 代码 xff1a ORG 0000H AJMP MAIN ORG 0100H MAIN MOV P1 0FEH 点亮LED1 AJMP MAIN END 二 延时控制流水灯 延时程序生成 x
  • <数据结构> 顺序表

    目录 一 顺序表介绍 二 准备工作 1 创建顺序表 2 初始化顺序表 3 检测是否需要扩容 4 销毁顺序表 5 打印顺序表 三 四大功能 1 增加数据 头插 尾插 指定下标插入 2 删除数据 头删 尾删 指定下标删除 3 查找数据 4 修改
  • Python实现--使用微信定时每天和女友发送定制消息(附代码教程)

    但凡有些事情重复时 xff0c 我就在想怎么可以用程序来自动化 这里想分享如何每天给女友定时微信发送 晚安 xff0c 如果只是晚安 xff0c 就略显单调 xff0c 于是爬取金山词霸每日一句 xff0c 英文和翻译 xff0c 借此设定
  • 容器(ubuntu20.04)开启远程桌面rdp(显示xterm和xclock)(下)

    docker pull chanhyeok sshd ubuntu20 04 root 64 fv az844 904 tmp docker images grep sshd ubuntu20 04 chanhyeok sshd ubunt
  • Python3 函数

    1 函数 1 1函数概念 函数 function 是将具有独立功能的代码块组织成为一个整体 xff0c 使其具有特殊功能的代码集 1 2 函数的作用 使用函数可以加强代码的复用性 xff0c 提高程序编写的效率 1 3 无参数函数语法格式
  • iphone6 修改版本&&iccid解锁

    原创文章 转载请备注 https blog csdn net qq 29173507 article details 104881386 设备 xff1a iphone6卡贴机 IOS12 4 9版本 US SM运营 流程 xff1a 越狱
  • 小米空气净化器2S换pm2.5传感器风扇

    原创文章 转载请备注 https blog csdn net qq 29173507 article details 111466293 设备 小米空气净化器2s 问题 pm2 5的数值显示为0不变 传感器异常 18年年底买了一台净化器 冬
  • vscode插件的使用highlight-words

    highlight words 高亮插件 xff0c 挺好用的 插件管理的搜索框查找并安装该插件即可 插件说明也要看一下哦 原创文章 转载请备注 https blog csdn net qq 29173507 article details
  • c语言程序的编译过程

    操作系统 xff1a ubantu 工具gcc 文件 test c abner 64 DESKTOP M6D2HEN mytest cat test c include lt stdio h gt define MAXC 3 define
  • C语言关键字_record

    重要关键字 涉及流程和单数据类型的关键字 xff0c 功能一般都比较简单 xff0c 在使用过程中很快就会熟悉 下列关键字相对前者来说 xff0c 功能较多 xff0c 值得好好学习 extern 实现外部链接 修饰符extern用在变量或