![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
文章平均质量分 74
myxmu
不积跬步无以至千里,不积小流无以成江海
展开
-
讲讲volatile的作用
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1). 并行设备的硬件寄存器(如:状态寄存器) 2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic转载 2013-08-29 14:45:10 · 552 阅读 · 0 评论 -
嵌入式C 面试题
一、预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1).#define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2).懂得预处理转载 2014-04-14 22:57:10 · 705 阅读 · 1 评论 -
可重入函数
可重入函数也可以这样理解,重入即表示重复进入,首先它意味着这个函数可以被中断,其次意味着它除了使用自己栈上的变量以外不依赖于任何环境(包括static),这样的函数就是purecode(纯代码)可重入,可以允许有该函数的多个副本在运行,由于它们使用的是分离的栈,所以不会互相干扰。如果确实需要访问全局变量(包括static),一定要注意实施互斥手段。可重入函数在并行运行环境中非常重要,但是一般要为访转载 2014-04-14 23:10:22 · 528 阅读 · 0 评论 -
关于位域的字节内存储顺序、字节对齐、字节序以及符号
位域,Bit-field,又称位段。位域操作是在位操作之外的另一种操作比特位的方法。 相对于按位操作而言,操作位域可以“像”操作普通的变量一样。所以在需要进行比特位 操作的场合,硬件控制、协议处理, 位域被广泛应用。位域可以定义在class、struct、 union中,作为他们的数据成员。 使用位域的好处,主要是不需要进 行与或非以及相关掩码的处理。但是,福兮祸转载 2014-04-14 00:54:30 · 2268 阅读 · 0 评论 -
C语言位域精解
有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态,用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来转载 2014-04-14 00:23:53 · 658 阅读 · 0 评论 -
C++随记总结(1)----关于C++中的大小端、位段(惑位域)和内存对齐
听到好几个朋友说到去一些公司做面试,总是遇到关于大小端、位段(或者叫位域)和内存对齐的考题,然后就不知所措了。虽然我认为很多开发根本就用不到这个,但是我认为很有必要学习理解这些知识点,因为它可以让你更了解C++的,了解程序在内存的运行情况,也能加深对计算机系统的理解。 声明:由于本文的代码会受到计算机环境的影响,故在此说明本篇博文中的程序的运行环境。 1、Mi转载 2013-09-11 23:45:03 · 883 阅读 · 0 评论 -
逻辑右移和算术右移
先做两个小题先。 (1)unsigned char x=3; x>1是多少? (2)char x=3; x>1是多少? (3)char x=-3; x>1是多少? 3写成二进制数是00000011;-3写成二进制数是(补码)11111101。 程序执行的时候,操作的是数值的编码表示,也就是数值在内存中的二进制表示。比如说,程序取-3的时候,就去取11转载 2013-09-11 23:37:06 · 4839 阅读 · 0 评论 -
程序编译时内存分配
在c程序里只有全局和静态变量有固定的逻辑地址(通常存在于数据段中),而所有局部变量的逻辑地址是运行时确定的,局部变量都是在运行时从栈分配的内存。在编译时产生的目标文件都是从地址0开始的,在连接时将各个目标文件进行符号替换,这时会修改相应的地址,最后产生一个从地址0开始的可执行文件。在该可执行文件中的地址称为逻辑地址,也就是在c中所说的内存地址。在运行时加载器会把可执行程序(通常是可执行转载 2013-09-11 23:35:22 · 1028 阅读 · 0 评论 -
用printf打印MAC地址的时候为什么要后面的&0xFF?
悬赏分:10 | 解决时间:2011-4-25 22:03 | 提问者:尤孟 MAC[i]是MAC地址的一个字节,如果去掉后面的&0xFF则会打印出00:50:56:ffffffeb:0e:ffffff86:(正确:00:50:56:eb:0e:86:),请问后面0xFF的作用是什么?最佳答案 MAC[i]应该是被定义成了char了,char是有符号的,完整的类型名是signe转载 2013-09-11 23:40:02 · 3044 阅读 · 0 评论 -
do...while(0)的妙用
在C++中,有三种类型的循环语句:for, while, 和do...while, 但是在一般应用中作循环时, 我们可能用for和while要多一些,do...while相对不受重视。 但是,最近在读我们项目的代码时,却发现了do...while的一些十分聪明的用法,不是用来做循环,而是用作其他来提高代码的健壮性。1. do...while(0)消除goto语句。通常,如果在转载 2013-09-11 23:50:42 · 564 阅读 · 0 评论 -
运算符
醋-初等,4个: ( ) [ ] -> 指向结构体成员 . 结构体成员坛-单目,9个: ! ~ ++ -- -负号 (类型) *指针 &取地址 sizeof长度酸-算术,5个: * / % + -减味-位移,2个: >灌-关系,6个: >= == 等于 != 不等于味-位逻,3个: & 按位与 ^ 按位异或 | 按位或落-逻辑,2个: && 逻辑与 || 逻辑或跳-条转载 2013-09-11 23:38:22 · 750 阅读 · 0 评论 -
区别.text, .data , .bss
.text, .data , .bss, .constdata, stack, heap; RO, RW, ZI 2008年06月06日 星期五 15:52.text段是代码段。它用来放程序代码(code)。它通常是只读的(程序代码,编译好了就确定了,不可能改来改去的嘛)。.data段是数据段。它用来存放初始化了的(initailized)全局变量(global)和初始化了的静态变量(转载 2013-09-11 23:10:18 · 2831 阅读 · 0 评论 -
c语言位域问题
#include using namespace std;struct BIT3{ int a1 : 31; unsigned int a2 : 1;};struct BIT4{ int a1 : 31; int a2 : 1;};int main(){ BIT3 bit3; bit3.a2=1; cout<<bit3.a2<<endl; /转载 2013-09-11 23:07:40 · 762 阅读 · 0 评论 -
C语言编译全过程介绍
C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织,形成最终生成可执行代码的过程。过程图解如下: 从图上可以看到,整个代码的编译过程分为编译和链接两个过程,编译对应图中的大括号括起的部分,其余则为链接过程。转载 2014-04-20 16:55:52 · 914 阅读 · 0 评论