社区
C++ 语言
帖子详情
tc++中当我去掉类型转换时,为何报int*不能赋给time*指针的error呢
Robincen
2003-10-21 10:52:08
tc++中:(已有相关头文件)
1 struct time tm,*tr;
2 tr=(struct time*) new time;
为什么第二句就是编译不过呢?并提示缺少 ;
而且当我去掉2中的类型转换时,也报int*不能赋给time*指针,但按tc++语法的话,应该是不报错的啊!!
请指教:
...全文
46
7
打赏
收藏
tc++中当我去掉类型转换时,为何报int*不能赋给time*指针的error呢
tc++中:(已有相关头文件) 1 struct time tm,*tr; 2 tr=(struct time*) new time; 为什么第二句就是编译不过呢?并提示缺少 ; 而且当我去掉2中的类型转换时,也报int*不能赋给time*指针,但按tc++语法的话,应该是不报错的啊!! 请指教:
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xiaoyunet
2003-10-21
打赏
举报
回复
你的语法是正确的,加不加转型都是对的,相信自己,问题不在这里。
Robincen
2003-10-21
打赏
举报
回复
但我写成 new struct time的时候,它反而提示time 没定义!
无语了~~
tc++中,必须写成struct "name"吗 ?
daizh
2003-10-21
打赏
举报
回复
应该是new struct time;
Spacesoft
2003-10-21
打赏
举报
回复
tr=(struct time*) new time;
用得着这么写吗?直接写tr=(time*) new time;不就可以了?而且个人认为(time*) 这个转换完全没有必要。假如不加这个转换要报错的话,那应该是编译器的问题。
Wolf0403
2003-10-21
打赏
举报
回复
晕啊,果然是 TC
Robincen
2003-10-21
打赏
举报
回复
请求帮助~~~~
Robincen
2003-10-21
打赏
举报
回复
#include<dos.h>
#include<stdlib.h>
main(){
struct time *tr;
tr=new time ;
}
为何加了stdlib.h 就编译不过了?
基于DOS的多任务系统的实现
基于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
time
count = 0; /*定义
时
间片*/ char far *indos_ptr = 0; /*该
指针
变量存放INDOS表示的地址*/ char far *crit_err_ptr = 0; /*该
指针
变量存放严重错误标志的地址*/ void
int
errupt (*old_
int
8)(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;
int
dosx(®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;
int
dosx(®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; i
int Seeknext() {
int
i,ks; i=current+1; ks=0; disable(); while(ks
intf("Seeknext tcb is
error
!!\n"); enable(); } void
int
errupt 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; /*重新开始计
时
*/
time
count=0; enable();/*关中断*/ } void
int
errupt new_
int
8(void) { /*调用原来的
时
钟中断服务程序*/ (*old_
int
8)(); /*进行计
时
*/
time
count++; /*当前线程的
时
间片到否*/ if(
time
count >= 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); pr
int
f("%s is finished!\n", tcb[current].name); my_swtch(); } void tcb_state() {
int
i; pr
int
f("These are the information of all threads: \n"); for(i=0;i
intf("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): pr
int
f("Running \n");break; case (2): pr
int
f("Ready \n");break; case (3): pr
int
f("Blocked\n");break; case (0): pr
int
f("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) { pr
int
f("\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; pr
int
f("%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); pr
int
f("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); pr
int
f("%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); pr
int
f("%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;i
int main(void) { InitDos(); InitTcb(); old_
int
8 = 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_
int
8); my_swtch(); while(!finished()) ; strcpy(tcb[0].name, "\0"); tcb[0].state = FINISHED; setvect(8, old_
int
8); pr
int
f("\n"); tcb_state(NTCB); pr
int
f("\nMulti_task system terminated.\n"); getchar(); return 0; }
华为编程开发规范与案例
软件编程规范培训实例与练习 软件编程规范培训实例与练习 问题分类 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(
c++
中try catch的用法小结
在
c++
中,可以直接抛出异常之后自己进行捕捉处理,如:(这样就可以在任何自己得到不想要的结果的
时
候进行中断,比如在进行数据库事务操作的
时
候,如果某一个语句返回SQL_
ERROR
则直接抛出异常,在catch块中进行事务回滚(回滚怎么理解?))。 #include
#include
using namespace std;
int
main () { try { throw 1; throw
error
; } catch(char *str) { cout << str << endl; } catch(
int
i)
c语言char强制转换为
int
_C语言入门这一篇就够了
c语言入门C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好,可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言,所以说学习C语言是进入编程世界的必修课。hello,world#include<stdio.h>
int
main() { /*在双引号中间输入Hello Worl...
C++
四种
类型转换
和类型有关的所有内容(
类型转换
,类型识别,类型属性等) 1.static_cast 基本的
类型转换
(编译期) 用于进行比较“自然”和低风险的转换,如整型和浮点型、字符型之间的互相转换。另外,如果对象所属的类重载了强制
类型转换
运算符 T(如 T 是
int
、
int
* 或其他类型名),则 static_cast 也能用来进行对象到 T 类型的转换。
不能
用于在不同类型的
指针
之间互相转换,也
不能
用于整型...
C++ 语言
64,654
社区成员
250,484
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章