c关键字分析

总结下c语言的基础知识

auto:

auto即C语言中局部变量的默认属性
编译器默认所有的局部变量都是auto的

static:

static修饰的局部变量存储在程序静态区
static的另一个意义是文件作用域标示符

register:

register变量的必须是CPU寄存器可以接受的值
不能用&运算符获取register变量的地址

goto:

禁用goto

程序质量与goto的出现次数成反比

将goto打入冷宫

void:

修饰函数返回值和参数

1.如果函数没有返回值,那么应该将其声明为void型

2.如果函数没有参数,应该声明其参数为void

不存在void变量
C语言没有定义void究竟是多大内存的别名

void指针

1.C语言规定只有相同类型的指针才可以相互赋值

2.void*指针作为左值用于“接收”任意类型的指针

3.void*指针作为右值赋值给其它指针时需要强制类型转换

extern:

1.extern用于声明外部定义的变量和函数

2.extern用于“告诉”编译器用C方式编译

sizeof:

1.sizeof是编译器的内置指示符,不是函数

2.sizeof用于“计算”相应实体所占的内存大小

3.sizeof的值在编译期就已经确定

const:

1.C语言中const修饰的变量是只读的,其本质还是变量

2.const只对编译器有用,在运行时无用

3.const修饰的数组是只读的,const修饰的数组空间不可被改变

4.const int* p; //p可变,p指向的内容不可变
5. int const* p; //p可变,p指向的内容不可变

6.int* const p; //p不可变,p指向的内容可变
7. const int* const p; //p和p指向的内容都不可变

总结:

*号左边时指针指向的数据为常量
当const出现在**后右边时指针本身为常量

const修饰函数参数和返回值

1.const修饰函数参数表示在函数体内不希望改变参数的值

2.const修饰函数返回值表示返回值不可改变,多用于返回指针的情形

volatile:

1.volatile可理解为“编译器警告指示字”

2.volatile用于告诉编译器必须每次去内存中取变量值

3.volatile主要修饰可能被多个线程访问的变量

4.volatile也可以修饰可能被未知因数更改的变量

struct:

1.struct中的每个域在内存中都独立分配空间

2.可用于柔性数组

#include <stdio.h>
#include <malloc.h>

typedef struct _soft_array
{
    int len;
    int array[];
}SoftArray;

int main()
{  
    int i = 0;
    SoftArray* sa = (SoftArray*)malloc(sizeof(SoftArray) + sizeof(int) * 10);
    
    sa->len = 10;
    
    for(i=0; i<sa->len; i++)
    {
        sa->array[i] = i + 1;
    }
    
    for(i=0; i<sa->len; i++)
    {
        printf("%d\n", sa->array[i]);   
    }
    
    free(sa);
    
    return 0;
}


union:

1.只分配最大域的空间,所有域共享这个空间

2.union的使用受系统大小端的影响

enum:

1.只能取定义时的离散值,枚举常量是真正意义上的常量

#include <stdio.h>
enum Color{
	GREEN,
	RED=2,
	BLUE
};

int main(){
	enum Color c=BLUE;
	printf("%d\n",c);
}
打印的值为3
#define:
1.#define宏常量只是简单的进行值替换
2.#define宏常量无类型信息
3.#define宏常量无法被调试
typedef:
1.typedef用于给一个已经存在的数据类型重命名
2.typedef并没有产生新的类型
3.typedef重定义的类型不能进行unsigned和signed扩展
#error:

        #error message

        注:message不需要用双引号包围
        #error编译指示字用于自定义程序员特有的编译错误消息类似的,#warning用于生成编译警告,但不会停止编译

#line:

#line用于强制指定新的行号和编译文件名,并对源程序的代码重新编号

       #line number filename
      注:filename可省略
      #line编译指示字的本质是重定义__LINE__和__FILE__

#pragma:

1. #pragma是编译器指示字,用于指示编译器完成一些特定的动作

2.#pragma所定义的很多指示字是编译器和操作系统特有的

3.#pragma在不同的编译器间是不可移植的

#pragma message

1.message参数在大多数的编译器中都有相似的实现

2.message参数在编译时输出消息到编译输出窗口中
3.message可用于代码的版本控制


#pragma pack

什么是内存对齐?

不同类型的数据在内存中按照一定的规则排列;而不是顺序的一个接一个的排放,这就是对齐。

为什么需要内存对齐?

CPU对内存的读取不是连续的,而是分成块读取的,块的大小只能是1、2、4、8、16字节

当读取操作的数据未对齐,则需要两次总线周期来访问内存,因此性能会大打折扣

某些硬件平台只能从规定的地址处取某些特定类型的数据,否则抛出硬件异常

#:

1.#运算符用于在预编译期将宏参数转换为字符串

##:

2.运算符用于在预编译期粘连两个符号


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
概述: C语言关键字翻译机是一款用于将C语言关键字翻译成其他语言的工具。用户可以输入C语言代码,程序会自动将其中的关键字翻译成指定的语言,方便用户理解和阅读代码。 设计目的: 本翻译机的设计目的是为了使非英语国家的程序员能够更好地学习和使用C语言,提高他们的开发效率。 设计思路: 该翻译机的设计思路如下: 1. 采用C++语言进行编写,使用面向对象的设计思想。 2. 通过分析C语言的语法规则,将其关键字进行分类。 3. 提供多种语言翻译选项,用户可根据需求选择不同的翻译语言。 4. 采用正则表达式技术,对代码进行分词,识别其中的关键字。 5. 通过关键字映射表,将识别出的关键字进行翻译。 6. 将翻译后的代码输出到界面或文件中。 设计特点: 该翻译机的设计特点如下: 1. 界面友好,使用简单,用户只需输入或粘贴代码,选择翻译语言,即可进行翻译。 2. 采用多种语言翻译选项,满足不同用户的需求。 3. 采用正则表达式技术,对代码进行分词,提高了翻译的准确性和效率。 4. 映射表可自定义,用户可根据自己的需要进行修改和扩展。 5. 程序具有良好的扩展性和可维护性,方便后期的维护和升级。 总结: C语言关键字翻译机是一款实用的工具,通过对C语言关键字进行翻译,使得非英语国家的程序员能够更好地学习和使用C语言。该翻译机具有界面友好、功能强大、易于扩展等特点,是一款值得推广和使用的工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值