C语言万能编译器

标题

万能翻译器、编译器模板

图片: 在这里插入图片描述
在这里插入图片描述

我的第一次博客:

今天是第一次跟大家在博客上面见面,我今天要讲的是万能翻译器、编辑器模板**

-在此之前我要说一下关于枚举(enum)、共用体(union)和结构体的概念。

  1. enum枚举:定义符号常量。

2.Struct结构体:
Struct结构体是一个自定义类型,是在一个已有类型的基础上产生的成员集合。

定义了结构体,可以为其声明一个变量。它的大小是用内存对齐的方式,这很重要。
在c语言或标准的c中struct关键字是不可省略的,而在c++面向对象的高级语言中,struct关键字可以省略的,因为后面的结构体名呢就是一个类型。
结构体变量的初始化和数组很相像,数据是对所有同类型的元素按顺序进行初始化,而结构体是按成员的顺序初始化。当定义了结构体呢要访问他的成员变量时,我们可以用成员访问符 . 表示。如果定义了一个指针,那么他是指针成员访问符 ->,一个箭头。
Struct和数组的一个区别:
同类型的结构体对象可以相互直接赋值,而数组不允许,数组:同类型、同大小,他也不能直接赋值,必须要一个元素一个元素的赋值。
同样的有数组这个概念也能定义结构体数组,定义好结构体之后呢定义了一个对象,这个结构体对象可以定义多个变量。
结构体作为函数参数传递的时候,可以作为指针或者引用传递,因为结构体占用的内存空间太大,比内置类型要大得多,

3.Union共用体:
在写法上跟结构体相同,关键字不一样,共用体在任一时刻时只有一个成员处于活动状态,所占用的空间是所有成员最大的那个成员的空间。
共用体是我们在处理数据时,我们要判断某一数据类型,根据数据类型来确定要使用union哪一成员,与enum相组合使用。

一个关于c的万能编译器:

代码:
#include “stdafx.h”
#include <iostream.h>
int main(int argc, char* argv[])
{

enum E_TYPE{CHAR,UCHAR,SHORT,USHORT,NUM,UNUM,LONG,ULONG,FLOAT,DOUBLE,STRING};

union DATA
{
char ch;
unsigned char ch1;

short snum;
unsigned short snum1;

int nnum;
unsigned int nnum1;

long lnum;
unsigned long lnum1;

float fnum;

double dnum;

const char *pStr;

};


struct TYPE
{
E_TYPE type;
DATA data;
};


TYPE value;
DATA data;


value.data.ch='A';
value.type = CHAR;
//var a = 'A';




switch(value.type)
{
case CHAR :
	cout<<value.data.ch<<endl;
	break;

case UCHAR :
	cout<<value.data.ch1<<endl;
	break;

case SHORT :
	cout<<value.data.snum<<endl;
	break;

case USHORT :
	cout<<value.data.snum1<<endl;
	break;

case NUM :
	cout<<value.data.nnum<<endl;
	break;

case UNUM :
	cout<<value.data.nnum1<<endl;
	break;

case LONG :
	cout<<value.data.lnum<<endl;
	break;

case ULONG :
	cout<<value.data.lnum1<<endl;
	break;

case FLOAT :
	cout<<value.data.fnum<<endl;
	break;

case DOUBLE :
	cout<<value.data.dnum<<endl;
	break;

case STRING :
	cout<<value.data.pStr<<endl;
	break;

default :
	break;

}





value.data.pStr = "test";
value.type = STRING;

switch(value.type)
{
case CHAR :
	cout<<value.data.ch<<endl;
	break;

case UCHAR :
	cout<<value.data.ch1<<endl;
	break;

case SHORT :
	cout<<value.data.snum<<endl;
	break;

case USHORT :
	cout<<value.data.snum1<<endl;
	break;

case NUM :
	cout<<value.data.nnum<<endl;
	break;

case UNUM :
	cout<<value.data.nnum1<<endl;
	break;

case LONG :
	cout<<value.data.lnum<<endl;
	break;

case ULONG :
	cout<<value.data.lnum1<<endl;
	Break

case FLOAT :
	cout<<value.data.fnum<<endl;
	break;
case DOUBLE :
	cout<<value.data.dnum<<endl;
	break;
case STRING :
	cout<<value.data.pStr<<endl;
	break;

default :
	break;

}
return 0;

}

在这里插入图片描述
其实也就相当于万能类型var value = ‘A’;
var value = “test”;
好了今天就到这里了,下次想到好的继续。写的过程也是防止以后忘记了可以迅速回想起来。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值