volatile是一个特征修饰符,它的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。
简单地说就是防止编译器对代码进行优化。比如如下程序:
int i;
i=1;
i=2;
i=3;
i=4;
对外部硬件而言,上述四条语句分别表示不同的操作,会产生四种不同的动作,但是编译器却会对上述四条语句进行优化,认为只有i=4(即忽略前三条语句,只产生一条机器代码)。如果在int前面加上volatile,则编译器会逐一地进行编译并产生相应的机器代码(产生四条代码)。
sprintf的作用是将一个格式化的字符串输出到一个目的字符串中,而printf是将一个格式化的字符串输出到屏幕。sprintf的第一个参数是目的字符串,如果不指定这个参数,执行过程中出现 “该程序产生非法操作,即将被关闭…“的提示。
因为C语言在进行字符串操作时不检查字符串的空间是否够大,所以可能会出现数组越界而导致程序崩溃的问题。即使碰巧,程序没有出错,也不要这么用,因为早晚会出错。所以一定要在调用sprintf之前分配足够大的空间给buf。
例如下面的程序:
char cStr[5];
int a;
a=Read_Distance();
sprintf(cStr,”%d”,a);//将a的值格式化并输出到字符串cStr中。这个%d是因为a是整形,如果a是浮点型,那么就要改为%f。
其实就和串口是一样的,只是打印的目的地不同而已。sprintf是打印到字符串中,printf则直接在命令行上输出。