以前一直不明白为什么c语言其实是一种更接近自然语言的语言,程序员去操纵c语言这种自然语言,怎么就等同于计算机操作各种数字呢?我现在有了一些思考,是因为存在一层编码一一对应关系的原因。
(1)宏定义的本质是事物或者特性被编码成一个一个有意义的数字,或者这样说,用数字去描述或者编码事物的特性。因为宏值本事上是有效数字,因此可以参与赋值运算了“=”。
例如
GPIO_InitStruct.Pin = GPIO_PIN_13;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF2_TIM1;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO的特性例如GPIO_PIN_13, GPIO_MODE_AF_PP,GPIO_NOPULL的本质是一些有意义的数字。
#define GPIO_PIN_13 ((uint16_t)0x2000U)
#define GPIO_NOPULL (0x00000000U)
#define GPIO_MODE_AF_PP (0x00000002U)
这让我想到了linux内核分工中的内核移植工程师所作的工作,就是将芯片手册中的事物以及特性用各种有意义的数字进行了编码,为驱动开发工程师创下了基础。(驱动开发工程师就不用操作那个数字了,甚至不知道数组。)
其实,程序员的工作很大一部分就是将遇到的事物编码成一个一个 有意义的数字(例如寄存器的不同值代表的含义),因为计算机是不识别自然语言的,只识别这些编码过的数字(实际上就是1010...的二级制代码)。正是因为事物或者特性可以被编码成有效数字,所以计算机可以识别这些数字,也就是可以识别事物以及相关特性,因此计算机才可以完成某些工作。
c语言为什么是高级语言?
正是因为宏定义的编码工作,是的程序员不用盯着一个一个数字,而只需要关系数字对应的事物或者特性即可了。程序员用c高级语言去操作这些事物或者特性也就等效于计算机是操作一个一个数字了。程序员编写的c语言代码更倾向于自然语言,正是有这种编码一一对应关系,我们用c语言完成了某个操作(类似于自然语言操作),也就等效于计算机操作一个一个数字完成了某些操作。
(2)编码思想,体现了C语言是高级语言,c语言是一种更接近自然语言的语言。
编码思想的含义除了宏定义之外,我感觉还体现在用一个变量名代对应内存格子。变量的定义也是一个编码过程,变量名(自然语言)---》分配了对应数量的内存格子(计算机语言)。
例如GPIO_InitStruct这个结构体变量以及对应的内存格子之间也是一种编码的关系,GPIO_InitStruct更接近自然语言,对应的格子才是计算机操作的单元。
5978

被折叠的 条评论
为什么被折叠?



