30天自制操作系统
上QQ阅读APP看书,第一时间看更新

3 试用箭头记号(harib02c)

事实上,在C语言里常常会用到类似于(*binfo).scrnx的表现手法,因此出现了一种不使用括号的省略表现方式,即binfo→scrnx,我们称之为箭头标记方式。前面也讲到过,a[i]是*(a + i)的省略表现形式所以可以说C语言中关于指针的省略表现形式很充实,很丰富。

使用箭头,可以将“xsize = (*binfo).scrnx; ”写成“xsize = binfo->scrnx; ”,简单又方便。不过我们还想更简洁些,即连变量xsize都不用,而是直接以binfo->scrnx来代替xsize。

本次的HariMain节选

void HariMain(void)
{
    struct BOOTINFO *binfo = (struct BOOTINFO *) 0x0ff0;

    init_palette();
    init_screen(binfo->vram, binfo->scrnx, binfo->scrny);

哦,看上去真清爽。我们运行一下“make run”,运行正常。

这次我们想了很多方法,但这些都只是C语言写法的问题,编译成机器语言以后,几乎没有差别。既然没有差别,笔者认为写得清晰一些没什么坏处,所以决定今后积极使用这种写法。讨厌在写法上花工夫的人不使用结构体也没关系,再退一步,还可以不用指针,继续使用write_mem8什么的也没问题。可以根据自己的理解程度和习惯,选择自己喜欢的方式。