一、类型限定符

extern
声明一个变量,extern声明的变量没有存储空间 const
定义一个常量,该常量必须赋值,之后且不允许更改 volatile
防止编译器优化代码??? register
定义寄存器变量,提高代码效率
register是建议型的指令,不是一般的命令型指令
在CPU存在空闲寄存器的情况下,register生效
反之寄存器没有空闲,就无法起效

volatile样例:

void volatileDemo() {
// 不使用volatile声明 编译器将舍去中间的赋值,直接从10 -> 51
int a = 10;
a = 11;
a = 1;
a = 31;
a = 41;
a = 51; // 使用volatile声明 编译器将保留中间的赋值
volatile int b = 10;
b = 11;
b = 1;
b = 31;
b = 41;
b = 51;
}

register的意思:

把该变量注册到寄存器中,如果空闲寄存器发现,则触发生效,变量立刻寄存放入

等待CPU计算处理

但是注意这个问题:

因为该变量可能存放到寄存器中,所以我们无法使用&获取该变量的地址

因为&是从内存中获取的

三、数组

数组名称用法:

使用sizeof(数组名)获取整个数组占用的内存空间

如果除以对应的sizeof(数据类型),就可以获得该数组的长度【元素个数】

void arrayDemo () {
int arr[] = {11, 13, 21, 45};
// arr存储的地址 等同于 &arr[0]
printf("arr == &arr[0] ? %x == %x", arr, &arr[0]);
} int main() {
arrayDemo();
return EXIT_SUCCESS;
}

四、函数剥离

脱离主函数文件编写程序

但是我的CLion上面就是引用失败,还找不到问题。。。

1、首先编写头文件

【demo.h】

#ifndef __DEMO_H__
#define __DEMO_H__

int sum(int n1,int n2);

#endif //__DEMO_H__

2、编写引用头文件的源文件

#include "demo.h"
#include <string.h>
#include <stdio.h> int sum(n1, n2) {
return n1 + n2;
}

3、在主函数源文件中的Main函数中调用文件的函数

#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
#include "demo.h"
int main() {
int result = sum(5, 6);
printf("sum 5、6 -> %d\n", result);
return EXIT_SUCCESS;
}

五、EXIT & RETURN

void exitAndReturn () {
exit(0); // 直接退出程序 return; // 当前这个函数结束
}

六、全局函数和静态函数

#include <stdio.h>
#include <stdlib.h>
#include <string.h> void globalFunction() {
// todo... 全局函数
// 允许引用其他文件函数,然后调用
// extern void fromOtherFileFunction();
// fromOtherFileFunction();
} static void staticLocalFunction() {
// static修饰之后,该函数仅提供给此文件调用
} int main() { return 0;
}

【C】Re04的更多相关文章

  1. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  2. 【原】谈谈对Objective-C中代理模式的误解

    [原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...

  3. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  4. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  5. 【调侃】IOC前世今生

    前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...

  6. Python高手之路【三】python基础之函数

    基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...

  7. Python高手之路【一】初识python

    Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...

  8. 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】

    说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...

  9. 【原】FMDB源码阅读(二)

    [原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...

  10. 【原】FMDB源码阅读(一)

    [原]FMDB源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 说实话,之前的SDWebImage和AFNetworking这两个组件我还是使用过的,但是对于 ...

随机推荐

  1. kettle从入门到精通 第六十三课 ETL之kettle kettle调用python脚本的两种方法

    kettle中不能直接调用python脚本,可以通过shell脚本和http进行调用pyton服务. 一.shell脚本调用python脚本 1.下面是一段简单的无参python脚本 import o ...

  2. 安装nodejs易遇到的坑

    @ 目录 背景描述 流程步骤 小结 背景描述 我的服务器是centos7.9,打算先直接通过yum安装,但是yum不能指定node版本,我直接指定显示404找不到,然后我设置了下node下载的源,还是 ...

  3. 「C++」简单模拟

    这是一个公式: \[F_n=\dfrac{\left(\frac{1+\sqrt{5}}{2}\right)^n-\left(\frac{1-\sqrt{5}}{2}\right)^n}{\sqrt{ ...

  4. json字符串忽略null,忽略字段,首字母大写等gson,jackson,fastJson实现demo,T data JSON.parseObject json转换

    json字符串忽略null,忽略字段,首字母大写等gson,jackson,fastJson实现demo package com.example.core.mydemo.json.vo; import ...

  5. uniapp ios 白屏

    这个问题找了两天,问题出现的很离谱代码编译没问题,安卓.ios真机运行也没问题,打包以后安卓没问题,iphone 12(ios16.6.1)安装也没问题,还有一个iphone 6s(ios14.7.1 ...

  6. 开源云同步的markdown写作软件——Yosoro

    文章目录 前言 简便的项目管理 舒服的写作体验 支持one driver 存在缺点 前言 Yosoro是一款支持在Win.Linux.macOS上使用的写作软件.它的界面设计以及交互上表达出的极简主义 ...

  7. MYSQL8-快速生成表结构(用于生成文档)

    各种工具都有,没有特别趁手的.不如自己用sql处理. SELECT column_name AS CODE, CASE WHEN column_comment IS NULL OR TRIM(colu ...

  8. C++之printf函数

    背景 C++中可以使用cout来输出. 但是cout输出一些格式化的数据非常麻烦. 比如: hour,min和sec代表当前时间,需求:按12:00:00格式输出当前时间. //使用cout输出 co ...

  9. Profinet IO从站数据 转EtherCAT项目案例

    目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 4 使用PRONETA软件获取PROFINET IO从站的配置信息 2 5 设置网关采集PROFINETIO从站设备数据 5 ...

  10. python基础-集合set { }

    集合的定义和操作 集合的特性: 元素数量 支持多个 元素类型 任意 下标索引 支持 重复元素 不支持 可修改性 支持 数据有序 否 使用场景 不可重复的数据记录场景 # 定义集合 my_set = { ...