tc++中当我去掉类型转换时,为何报int*不能赋给time*指针的error呢

Robincen 2003-10-21 12:15:25
tc++中:(已有相关头文件)
1 struct time tm,*tr;
2 tr=(struct time*) new time;
为什么第二句就是编译不过呢?并提示缺少 ;
而且当我去掉2中的类型转换时,也报int*不能赋给time*指针,但按tc++语法的话,应该是不报错的啊!!
请指教:

有朋友说要写成new struct time
而当我写成 new struct time的时候,它反而提示time 没定义!
无语了~~
另外tc++中,必须写成struct "name"吗 ?
...全文
71 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
arfi 2003-10-22
  • 打赏
  • 举报
回复
你写成下面的形式可以编译过去:
#include <dos.h>
#include <stdlib.h>

main()
{
struct time *tr;

tr = new struct time;
}
这是由于在头文件stdlib.h中有个time()函数造成的,做个实验:

struct stu
{
char name[20];
}

long stu(){return 0;}

main()
{
stu stu1;
}
这段代码就会报错,而将main中的stu stu1;改写成struct stu stu1;就好了。
arfi 2003-10-21
  • 打赏
  • 举报
回复
相关头文件正确吗?其定义在<dos.h>中
写成tr = new time;就可以了
darcymei 2003-10-21
  • 打赏
  • 举报
回复
代码
Robincen 2003-10-21
  • 打赏
  • 举报
回复
请求帮助~~~~~
Robincen 2003-10-21
  • 打赏
  • 举报
回复
#include<dos.h>
#include<stdlib.h>

main(){
struct time *tr;
tr=new time ;
}

为何加了stdlib.h 就编译不过了?
langzi8818 2003-10-21
  • 打赏
  • 举报
回复
UP
基于DOS的多任务系统的实现 #include #include #include <time.h> #include /*定义TCB状态*/ #define FINISHED 0 #define RUNNING 1 #define READY 2 #define BLOCKED 3 #define NTCB 5 /*定义最大空闲TCB个数*/ #define TC 2 /*定义间片长度*/ #define NBUF 6 /*定义缓冲区大小*/ #define GET_INDOS 0x34 #define GET_CRIT_ERR 0x5d06 struct TCB{ unsigned char *stack; /*线程堆栈起始地址*/ unsigned ss; /*堆栈段址*/ unsigned sp; /*堆栈指针*/ char state; /*线程状态*/ char name[15]; /*线程外部标识符*/ struct TCB *next; }tcb[NTCB]; /*初始化堆栈使用*/ struct int_regs{ unsigned bp, di, si, ds, es, dx, cx, bx, ax, ip, cs, flags, off, seg; }; char fpub[3]; int current= -1; /*定义一个当前TCB下标的全局变量*/ int timecount = 0; /*定义间片*/ char far *indos_ptr = 0; /*该指针变量存放INDOS表示的地址*/ char far *crit_err_ptr = 0; /*该指针变量存放严重错误标志的地址*/ void interrupt (*old_int8)(void);/*旧的钟中断处理程序*/ typedef int (far *codeptr)(void); /*定义了一个函数指针类型*/ int buffer[NBUF] = {-1,-1,-1,-1,-1,-1}; /*生产者消费者中的缓冲区*/ int in = 0; int out = 0; typedef struct{ int value; struct TCB *wq; }semaphore; semaphore mutex={1,NULL},empty={NBUF,NULL},full={0,NULL},Mutex2={1,NULL}; /*生产者消费者中的信号量*/ void InitDos(void) { union REGS regs; struct SREGS segregs; regs.h.ah = GET_INDOS; intdosx(®s,®s,&segregs); indos_ptr = MK_FP(segregs.es,regs.x.bx); if(_osmajor<3) crit_err_ptr = indos_ptr+1; else if(_osmajor==3 && _osminor==0) crit_err_ptr = indos_ptr-1; else{ regs.x.ax = GET_CRIT_ERR; intdosx(®s,®s,&segregs); crit_err_ptr = MK_FP(segregs.ds,regs.x.si); } } int DosBusy(void) { if(indos_ptr && crit_err_ptr) return (*indos_ptr || *crit_err_ptr); else return -1; } int finished(void) { int i; for(i=1; iint Seeknext() { int i,ks; i=current+1; ks=0; disable(); while(ksintf("Seeknext tcb is error!!\n"); enable(); } void interrupt my_swtch(void) { disable();/*开中断*/ /*保护正在执行的线程current的现场,暂停它的执行*/ tcb[current].ss=_SS; tcb[current].sp=_SP; if(tcb[current].state==RUNNING) tcb[current].state=READY; /*找到新的就绪线程i*/ current=Seeknext(); tcb[current].state=RUNNING; /*切换堆栈,恢复线程i的现场,把CPU分派给它*/ _SS=tcb[current].ss; _SP=tcb[current].sp; /*重新开始计*/ timecount=0; enable();/*关中断*/ } void interrupt new_int8(void) { /*调用原来的钟中断服务程序*/ (*old_int8)(); /*进行计*/ timecount++; /*当前线程的间片到否*/ if(timecount >= TC) if(!DosBusy()) { /*调用my_swtch进行重新调度*/ my_swtch(); } } void Destroy(int i) { if(tcb[i].state==RUNNING) { disable(); tcb[i].state=FINISHED; free(tcb[i].stack); enable(); } return; } void over(void) { Destroy(current); printf("%s is finished!\n", tcb[current].name); my_swtch(); } void tcb_state() { int i; printf("These are the information of all threads: \n"); for(i=0;iintf("the key word of the thread is : %d\n the name of thread is : %s\n the state of the thread is ",i,tcb[i].name); switch(tcb[i].state) { case (1): printf("Running \n");break; case (2): printf("Ready \n");break; case (3): printf("Blocked\n");break; case (0): printf("Finished\n");break; } } } /*创建线程*/ int create(char *name, codeptr code, int stacklen) { int i = 0; struct int_regs *temp; while(tcb[i].state != FINISHED) /*查找空闲TCB块*/ i++; if(i == NTCB) return -1; /*没有空闲TCB块可用*/ strcpy(tcb[i].name, name); tcb[i].state = READY; tcb[i].stack = (unsigned char*)malloc(stacklen); /*为新线程分配私有堆栈空间*/ tcb[i].stack = tcb[i].stack + stacklen; /*初始化新线程的私有堆栈*/ temp = (struct int_regs *)tcb[i].stack-1; temp->ds = _DS; temp->es = _ES; temp->flags = 0x200; temp->ip = FP_OFF(code); temp->cs = FP_SEG(code); temp->off = FP_OFF(over); /*将over函数压入堆栈,线程结束自动执行*/ temp->seg = FP_SEG(over); tcb[i].ss = FP_SEG(temp); tcb[i].sp = FP_OFF(temp); return i; } void block(semaphore *sem) { struct TCB *p; disable(); tcb[current].state = BLOCKED; p = sem->wq; if(p == NULL){ sem->wq = &tcb[current]; } else{ while(p->next != NULL) p = p->next ; p->next = &tcb[current]; } tcb[current].next = NULL; my_swtch(); enable(); } void wakeup(semaphore *sem) { struct TCB *p; disable(); p = sem->wq; if(p != NULL){ p->state = READY; sem->wq = sem->wq->next; } enable(); } void wait(semaphore *sem) { disable(); sem->value = sem->value - 1; if(sem->value < 0) { printf("\nthe thread of %s is blocked\n",tcb[current].name); block(sem); } enable(); } void signal(semaphore *sem) { disable(); sem->value = sem->value + 1; if(sem->value <= 0) wakeup(sem); enable(); } void proceducer() { int i, j, k; for(i = 1; i <=13;i++){ wait(&empty); wait(&mutex); buffer[in] = i*i; printf("%s puts a number of %d in the buffer \n",tcb[current].name, buffer[in]); /*for(j=0; j<10000; j++) for(k=0; k<10000; k++);*/ in = (in +1) % NBUF; signal(&mutex); signal(&full); } } void consumer() { int i, j, k; for(i = 1; i<=7;i++){ wait(&full); wait(&mutex); printf("consumer gets the number of %d from the buffer\n", buffer[out]); buffer[out] = -1; /*for(j=0; j<1000; j++) for(k=0; k<10000; k++);*/ out = (out+1) % NBUF; signal(&mutex); signal(&empty); } } void f1() { int i,j,k; wait(&Mutex2); strcpy(fpub,"f1"); signal(&Mutex2); for(i=1;i<=22;i++) { wait(&Mutex2); printf("%s is running !\n",fpub); signal(&Mutex2); for(j=0;j<10000;j++) for(k=0;k<10000;k++); } } void f2() { int i,j,k; wait(&Mutex2); /*做放入数的操作*/ strcpy(fpub,"f2"); signal(&Mutex2); for(i=1;i<=33;i++) { wait(&Mutex2); printf("%s is running !\n",fpub); signal(&Mutex2); for(j=0;j<10000;j++) for(k=0;k<10000;k++); } } void InitTcb()/*TCB的初始化*/ { int i; for(i=0;iint main(void) { InitDos(); InitTcb(); old_int8 = getvect(8); strcpy(tcb[0].name, "main"); tcb[0].state = RUNNING; current = 0 ; create("proceducerOne", (codeptr)proceducer, 1024); create("consumer", (codeptr)consumer, 1024); /*create("proceducerTwo", (codeptr)proceducer, 1024); create("f1",(codeptr)f1,1024); create("f2",(codeptr)f2,1024);*/ tcb_state(NTCB); setvect(8, new_int8); my_swtch(); while(!finished()) ; strcpy(tcb[0].name, "\0"); tcb[0].state = FINISHED; setvect(8, old_int8); printf("\n"); tcb_state(NTCB); printf("\nMulti_task system terminated.\n"); getchar(); return 0; }
win-tc下的,修改下可以在vc下运行,是c语言编写的 #include "stdio.h" /*标准输入输出函数库*/ #include "stdlib.h" /*标准函数库*/ #include "string.h" /*字符串函数库*/ #include "conio.h" /*屏幕操作函数库*/ #define HEADER1 " ---------------------------TELEPHONE BOOK---------------------------\n" #define HEADER2 " | num | name | phonenumber | address | \n" #define HEADER3 " |--------------|------------|-----------------|---------------------| \n" #define FORMAT " | %-10s| %-10s| %-15s |%-20s | \n" #define DATA p->num,p->name,p->phonenum,p->address #define END " ---------------------------------------------------------------------\n" #define N 100 int saveflag=0; /*是否需要存盘的标志变量*/ /*定义与电话簿有关的数据结构*/ typedef struct telebook /*标记为telebook*/ { char num[4]; /*编号*/ char name[10]; /*姓名*/ char phonenum[15]; /*电话号码*/ char address[20]; /*地址*/ }TELEBOOK; void menu() /*主菜单*/ { system("cls"); /*调用DOS命令,清屏.与clrscr()功能相同*/ textcolor(13); /*在文本模式中选择新的字符颜色*/ gotoxy(10,5); /*在文本窗口中设置光标*/ cprintf(" The telephone-book Management System \n"); gotoxy(10,8); cprintf(" *************************Menu********************************\n"); gotoxy(10,9); cprintf(" * 1 input record 2 display record *\n"); gotoxy(10,10); cprintf(" * 3 delete record 4 search record *\n"); gotoxy(10,11); cprintf(" * 5 modify record 6 insert record *\n"); gotoxy(10,12); cprintf(" * 7 sort record 8 save record *\n"); gotoxy(10,13); cprintf(" * 0 quit system *\n"); gotoxy(10,14); cprintf(" *************************************************************\n"); /*cprintf()送格式化输出至文本窗口屏幕中*/ } /*格式化输出表头*/ void printheader() { printf(HEADER1); printf(HEADER2); printf(HEADER3); } /*格式化输出表中数据*/ void printdata(TELEBOOK pp) { TELEBOOK* p; p=&pp; printf(FORMAT,DATA); } /*显示数组temp[]中存储的电话簿记录,内容为telebook结构中定义的内容*/ void Disp(TELEBOOK temp[],int n) { int i; if(n==0) /*表示没有电话簿记录*/ { printf("\n=====>Not telephone record!\n"); getchar(); return; } printf("\n\n"); printheader(); /*输出表格头部*/ i=0; while(iintdata(temp[i]); i++; printf(HEADER3); } getchar(); } void Wrong() /*输出按键错误信息*/ { printf("\n\n\n\n\n***********Error:input has wrong! press any key to continue**********\n"); getchar(); } void Nofind() /*输出未查找此记录的信息*/ { printf("\n=====>Not find this telephone record!\n"); } /************************************************************* 作用:用于定位数组中符合要求的记录,并返回保存该记录的数组元素下标值 参数:findmess[]保存要查找的具体内容; nameorphonenum[]保存按什么在数组中查找; **************************************************************/ int Locate(TELEBOOK temp[],int n,char findmess[],char nameorphonenum[]) { int i=0; if(strcmp(nameorphonenum,"phonenum")==0) /*按电话号码查询*/ { while(iint lens,char *notice) { char n[255]; do{ printf(notice); /*显示提示信息*/ scanf("%s",n); /*输入字符串*/ if(strlen(n)>lens) printf("\n exceed the required length! \n"); /*进行长度校验,超过lens值重新输入*/ }while(strlen(n)>lens); strcpy(t,n); /*将输入的字符串拷贝到字符串t中*/ } /*增加电话簿记录*/ int Add(TELEBOOK temp[],int n) { char ch,num[10]; int i,flag=0; system("cls"); Disp(temp,n); /*先打印出已有的电话簿信息*/ while(1) /*一次可输入多条记录,直至输入编号为0的记录才结束添加操作*/ { while(1) /*输入记录编号,保证该编号没有被使用,若输入编号为0,则退出添加记录操作*/ { stringinput(num,10,"input number(press '0'return menu):"); /*格式化输入编号并检验*/ flag=0; if(strcmp(num,"0")==0) /*输入为0,则退出添加操作,返回主界面*/ {return n;} i=0; while(iintf("==>The number %s is existing,try again?(y/n):",num); scanf("%c",&ch); if(ch=='y'||ch=='Y') continue; else return n; } else {break;} } strcpy(temp[n].num,num); /*将字符串num拷贝到temp[n].num中*/ stringinput(temp[n].name,15,"Name:"); stringinput(temp[n].phonenum,15,"Telephone:"); stringinput(temp[n].address,15,"Adress:"); saveflag=1; n++; } return n; } /*按编号或姓名,查询电话簿记录*/ void Qur(TELEBOOK temp[],int n) { int select; /*1:按姓名查,2:按电话号码查,其他:返回主界面(菜单)*/ char searchinput[20]; /*保存用户输入的查询内容*/ int p=0; if(n<=0) /*若数组为空*/ { system("cls"); printf("\n=====>No telephone record!\n"); getchar(); return; } system("cls"); printf("\n =====>1 Search by name =====>2 Search by telephone number\n"); printf(" please choice[1,2]:"); scanf("%d",&select); if(select==1) /*按姓名查询*/ { stringinput(searchinput,10,"input the existing name:"); p=Locate(temp,n,searchinput,"name"); /*在数组temp中查找编号为searchinput值的元素,并返回该数组元素的下标值*/ if(p!=-1) /*若找到该记录*/ { printheader(); printdata(temp[p]); printf(END); printf("press any key to return"); getchar(); } else Nofind(); getchar(); } else if(select==2) /*按电话号码查询*/ { stringinput(searchinput,15,"input the existing telephone number:"); p=Locate(temp,n,searchinput,"phonenum"); if(p!=-1) { printheader(); printdata(temp[p]); printf(END); printf("press any key to return"); getchar(); } else Nofind(); getchar(); } else Wrong(); getchar(); } /*删除电话簿记录:先找到保存该记录的数组元素的下标值,然后在数组中删除该数组元素*/ int Del(TELEBOOK temp[],int n) { int sel; char findmess[20]; int p=0,i=0; if(n<=0) { system("cls"); printf("\n=====>No telephone record!\n"); getchar(); return n; } system("cls"); Disp(temp,n); printf("\n =====>1 Delete by name =====>2 Delete by telephone number\n"); printf(" please choice[1,2]:"); scanf("%d",&sel); if(sel==1) { stringinput(findmess,10,"input the existing name:"); p=Locate(temp,n,findmess,"name"); getchar(); if(p!=-1) { for(i=p+1;iintf("\n==>delete success!\n"); n--; getchar(); saveflag=1; } else Nofind(); getchar(); } else if(sel==2) /*先按电话号码查询到该记录所在的数组元素的下标值*/ { stringinput(findmess,15,"input the existing telephone number:"); p=Locate(temp,n,findmess,"phonenum"); getchar(); if(p!=-1) { for(i=p+1;iintf("\n=====>delete success!\n"); n--; getchar(); saveflag=1; } else Nofind(); getchar(); } return n; } /*修改电话簿记录。先按输入的联系人姓名查询到该记录, 然后提示用户修改该记录编号之外的值,编号不能修改*/ void Modify(TELEBOOK temp[],int n) { char findmess[20]; int p=0; if(n<=0) { system("cls"); printf("\n=====>No telephone number record!\n"); getchar(); return ; } system("cls"); printf("modify telephone book recorder"); Disp(temp,n); stringinput(findmess,10,"input the existing name:"); /*输入并检验该姓名*/ p=Locate(temp,n,findmess,"name"); /*查询到该数组元素,并返回下标值*/ if(p!=-1) /*若p!=-1,表明已经找到该数组元素*/ { printf("Number:%s,\n",temp[p].num); printf("Name:%s,",temp[p].name); stringinput(temp[p].name,15,"input new name:"); printf("Name:%s,",temp[p].phonenum); stringinput(temp[p].phonenum,15,"input new telephone:"); printf("Name:%s,",temp[p].address); stringinput(temp[p].address,30,"input new address:"); printf("\n=====>modify success!\n"); getchar(); Disp(temp,n); getchar(); saveflag=1; } else {Nofind(); getchar(); } return ; } /*插入记录:按编号查询到要插入的数组元素的位置,然后在该记录编号之后插入一个新数组元素。*/ int Insert(TELEBOOK temp[],int n) { char ch,num[10],s[10]; /*s[]保存插入点位置之前的记录编号,num[]保存输入的新记录的编号*/ TELEBOOK newinfo; int flag=0,i=0,kkk=0; system("cls"); Disp(temp,n); while(1) { stringinput(s,10,"please input insert location after the Number:"); flag=0;i=0; while(iintf("\n=====>The number %s is not existing,try again?(y/n):",s); scanf("%c",&ch); if(ch=='y'||ch=='Y') {continue;} else {return n;} } } /*以下新记录的输入操作与Add()相同*/ while(1) { stringinput(num,10,"input new Number:"); i=0;flag=0; while(iintf("\n=====>Sorry,The number %s is existing,try again?(y/n):",num); scanf("%c",&ch); if(ch=='y'||ch=='Y') {continue;} else {return n;} } else break; } strcpy(newinfo.num,num); /*将字符串num拷贝到newinfo.num中*/ stringinput(newinfo.name,15,"Name:"); stringinput(newinfo.phonenum,15,"Telephone:"); stringinput(newinfo.address,15,"Adress:"); saveflag=1; /*在main()有对该全局变量的判断,若为1,则进行存盘操作*/ for(i=n-1;i>kkk;i--) /*从最后一个组织元素开始往向移一个元素位置*/ { strcpy(temp[i+1].num,temp[i].num); strcpy(temp[i+1].name,temp[i].name); strcpy(temp[i+1].phonenum,temp[i].phonenum); strcpy(temp[i+1].address,temp[i].address); } strcpy(temp[kkk+1].num,newinfo.num); /*在kkk的元素位置后插入新记录*/ strcpy(temp[kkk+1].name,newinfo.name); strcpy(temp[kkk+1].phonenum,newinfo.phonenum); strcpy(temp[kkk+1].address,newinfo.address); n++; Disp(temp,n); printf("\n\n"); getchar(); return n; } /*利用选择排序法实现数组的按记录编号或姓名的升序排序*/ void SelectSort(TELEBOOK temp[],int n) { int i=0,j=0,flag=0,indexmin,select; char charflag[10]; TELEBOOK newinfo; if(n<=0) { system("cls"); printf("\n=====>Not telephone record!\n"); getchar(); return ; } system("cls"); Disp(temp,n); /*显示排序前的所有记录*/ printf(" ==>1 SORT BY NUMBER ==>2 SORT BY NAME\n"); printf(" please choice[1,2]:"); scanf("%d",&select); if(select==1) /*按记录编号排序*/ { for(i=0;iintf("\n =====>sort complete!\n"); getchar(); return; } else if(select==2) { for(i=0;i0) { charflag[0]=temp[j].name; indexmin=j; } } strcpy(newinfo.num,temp[i].num); /*利用结构变量newinfo实现数组元素的交换*/ strcpy(newinfo.name,temp[i].name); strcpy(newinfo.phonenum,temp[i].phonenum); strcpy(newinfo.address,temp[i].address); strcpy(temp[i].num,temp[indexmin].num); strcpy(temp[i].name,temp[indexmin].name); strcpy(temp[i].phonenum,temp[indexmin].phonenum); strcpy(temp[i].address,temp[indexmin].address); strcpy(temp[indexmin].num,newinfo.num); strcpy(temp[indexmin].name,newinfo.name); strcpy(temp[indexmin].phonenum,newinfo.phonenum); strcpy(temp[indexmin].address,newinfo.address); } Disp(temp,n); /*显示排序后的所有记录*/ saveflag=1; printf("\n =====>sort complete!\n"); getchar(); return; } else {Wrong(); getchar(); getchar(); return;} } /*数据存盘,若用户没有专门进行此操作且对数据有修改,在退出系统, 会提示用户存盘*/ void Save(TELEBOOK temp[],int n) { FILE* fp; int i=0; fp=fopen("c:\\telephon","w");/*以只写方式打开文本文件*/ if(fp==NULL) /*打开文件失败*/ { printf("\n=====>open file error!\n"); getchar(); return ; } for(i=0;i0) { getchar(); printf("\n\n=====>save file complete,total saved's record number is:%d\n",i); getchar(); saveflag=0; } else {system("cls"); printf("the current link is empty,no telephone record is saved!\n"); getchar(); } fclose(fp); /*关闭此文件*/ } void main() { TELEBOOK tele[N]; /*定义TELEBOOK结构体*/ FILE *fp; /*文件指针*/ int select; /*保存选择结果变量*/ char ch; /*保存(y,Y,n,N)*/ int count=0; /*保存文件中的记录条数(或元素个数)*/ fp=fopen("C:\\telephon","a+"); /*以追加方式打开文本文件c:\telephon,可读可写,若此文件不存在,会创建此文件*/ if(fp==NULL) { printf("\n=====>can not open file!\n"); exit(0); } while(!feof(fp)) { if(fread(&tele[count],sizeof(TELEBOOK),1,fp)==1) /*一次从文件中读取一条电话簿记录*/ count++; } fclose(fp); /*关闭文件*/ printf("\n==>open file sucess,the total records number is : %d.\n",count); getchar(); menu(); while(1) { system("cls"); menu(); printf("\n Please Enter your choice(0~8):"); /*显示提示信息*/ scanf("%d",&select); if(select==0) { if(saveflag==1) /*若对数组的数据有修改且未进行存盘操作,则此标志为1*/ { getchar(); printf("\n==>Whether save the modified record to file?(y/n):"); scanf("%c",&ch); if(ch=='y'||ch=='Y') Save(tele,count); } printf("\n===>thank you for useness!"); getchar(); break; } switch(select) { case 1:count=Add(tele,count);break; /*增加电话簿记录*/ case 2:system("cls");Disp(tele,count);break; /*显示电话簿记录*/ case 3:count=Del(tele,count);break; /*删除电话簿记录*/ case 4:Qur(tele,count);break; /*查询电话簿记录*/ case 5:Modify(tele,count);break; /*修改电话簿记录*/ case 6:count=Insert(tele,count);break; /*插入电话簿记录*/ case 7:SelectSort(tele,count);break; /*排序电话簿记录*/ case 8:Save(tele,count);break; /*保存电话簿记录*/ default: Wrong();getchar();break; /*按键有误,必须为数值0-9*/ } } }
国际学术期刊Science/AAAS和英特尔在全球首次联袂推出第一季《架构师成长计划》以来,吸引了无数架构师踊跃参与,获得业内广泛赞誉。为持续助力架构师把握数智机遇,构建未来,第二季《架构师成长计划》全新升级,强势归来!业内顶尖架构师大咖齐聚,为架构师群体量身打造系统成长课程,带来涵盖云游戏、云原生、联邦学习、生信大数据、算力网络、云网融合等多个热门话题的前沿技术及案例实践。第一期:超视频代 音视频架构建设与演进复制链接收看完整内容:https://bizwebcast.intel.cn/eventstart.aspx?eid=298&tc=yxq0921l2d&frm=csdn_2第二期:转化医学研究背景下的高性能计算平台复制链接收看完整内容:https://bizwebcast.intel.cn/eventstart.aspx?eid=311&tc=pzw21rx59o&frm=csdn_2第三期:联邦学习的研究与应用实践复制链接收看完整内容:https://bizwebcast.intel.cn/eventstart.aspx?eid=315&tc=0e8trfvt8i&frm=csdn_2第四期:用架构思维为云原生做减法复制链接收看完整内容:https://bizwebcast.intel.cn/eventstart.aspx?eid=316&tc=i2kgf55ggn&frm=csdn_2第五期:网络智能化技术与演进复制链接收看完整内容:https://bizwebcast.intel.cn/eventstart.aspx?eid=322&tc=ckhvmonqvb&frm=CSDN_2第六期:异构计算 数据中心“芯”变革复制链接收看完整内容:https://bizwebcast.intel.cn/eventstart.aspx?eid=325&tc=mzppx1h6ri&frm=csdn_2第七期:筑算力,话东西复制链接收看完整内容:https://bizwebcast.intel.cn/eventstart.aspx?eid=327&tc=gwb7n8x79n&frm=csdn_2第八期:AI驱动的生命科学创新范式之变复制链接收看完整内容:https://bizwebcast.intel.cn/eventstart.aspx?eid=328&tc=zircyqwy9u&frm=csdn_2第九期:软硬一体实现数据库性能优化复制链接收看完整内容:https://bizwebcast.intel.cn/eventstart.aspx?eid=348&tc=4a46kfrb0o&frm=csdn_2第十期:AI规模化应用代的深度学习平台构建复制链接收看完整内容:https://bizwebcast.intel.cn/eventstart.aspx?eid=349&tc=fm9a1mrumb&frm=csdn_2
软件编程规范培训实例与练习 软件编程规范培训实例与练习  问题分类 1 逻辑类问题(A类)-指设计、编码中出现的计算正确性和一致性、程序逻辑控制等方面出现的问题,在系统中起关键作用,将导致软件死机、功能正常实现等严重问题; 接口类问题(B类)-指设计、编码中出现的函数和环境、其他函数、全局/局部变量或数据变量之间的数据/控制传输不匹配的问题,在系统中起重要作用,将导致模块间配合失效等严重问题; 维护类问题(C类)-指设计、编码中出现的对软件系统的维护方便程度造成影响的问题,在系统中不起关键作用,但对系统后期维护造成不便或导致维护费用上升; 可测试性问题(D类)-指设计、编码中因考虑不周而导致后期系统可测试性差的问题。  处罚办法 问题发生率: P=D/S D=DA+0.5DB+0.25DC 其中: P -问题发生率 D -1个季度内错误总数 DA -1个季度内A类错误总数 DB -1个季度内B类错误总数 DC -1个季度内C类错误总数 S -1个季度内收到问题告单总数 1)当D≥3,如果P≥3%,将进行警告处理,并予以公告; 2)当D≥5,如果P≥5%,将进行罚款处理,并予以公告。 目 录 一、逻辑类代码问题 第5页 1、变量/指针在使用前就必须初始化 第5页 【案例1.1.1】 第5页 2、防止指针/数组操作越界 第5页 【案例1.2.1】 第5页 【案例1.2.2】 第6页 【案例1.2.3】 第7页 【案例1.2.4】 第8页 3、避免指针的非法引用 第9页 【案例1.3.1】 第9页 4、变量类型定义错误 第10页 【案例1.4.1】 第10页 5、正确使用逻辑与&&、屏蔽&操作符 第17页 【案例1.5.1】 第17页 6、注意数据类型的匹配 第18页 【案例1.6.1】 第18页 【案例1.6.2】 第18页 7、用于控制条件转移的表达式及取值范围是否书写正确 第20页 【案例1.7.1】 第20页 【案例1.7.2】 第21页 【案例1.7.3】 第22页 8、条件分支处理是否有遗漏 第24页 【案例1.8.1】 第24页 9、引用已释放的资源 第26页 【案例1.9.1】 第26页 10、分配资源是否已正确释放 第28页 【案例1.10.1】 第28页 【案例1.10.2】 第29页 【案例1.10.3】 第30页 【案例1.10.4】 第32页 【案例1.10.5】 第33页 【案例1.10.6】 第35页 【案例1.10.7】 第38页 11、防止资源的重复释放 第39页 【案例1.11.1】 第39页 12、公共资源的互斥性和竞用性 第40页 【案例1.12.1】 第40页 【案例1.12.2】 第40页 二、接口类代码问题 第43页 1、对函数参数进行有效性检查 第43页 【案例2.1.1】 第43页 【案例2.1.2】 第43页 【案例2.1.3】 第44页 【案例2.1.4】 第46页 【案例2.1.5】 第47页 【案例2.1.6】 第48页 2、注意多出口函数的处理 第49页 【案例2.2.1】 第49页 三、维护类代码问题 第51页 1、 统一枚举类型的使用 第51页 【案例3.1.1】 第51页 2、 注释量至少占代码总量的20% 第51页 【案例3.2.1】对XXX产品BAM某版本部分代码注释量的统计 第51页 四、产品兼容性问题 第52页 1、系统配置、命令方式 第52页 【案例4.1.1】 第52页 【案例4.1.2】 第53页 2、设备对接 第54页 【案例4.2.1】 第54页 3、其他 第55页 【案例4.3.1】 第55页 五、版本控制问题 第58页 1、新老代码中同一全局变量不一致 第58页 【案例5.1.1】 第58页 六、可测试性代码问题 第59页 1、调试信息/打印信息的正确性 第59页 【案例6.1.1】 第59页 一、逻辑类代码问题 1、变量/指针在使用前就必须初始化 【案例1.1.1】 C语言中最大的特色就是指针指针的使用具有很强的技巧性和灵活性,但同也带来了很大的危险性。在XXX的代码中有如下一端对指针的灵活使用: ... ... _UC *puc_card_config_tab; ... ... Get_Config_Table(

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧