【C】Re04

一、类型限定符

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
", 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;
}
原文地址:https://www.cnblogs.com/mindzone/p/13932869.html