0
当我执行这个程序,一秒钟指示灯闪烁,然后2秒,然后循环:使用MPLAB在C语言中声明全局变量和局部变量有什么区别?
#include <htc.h>
#include <pic16f877.h>
#define _XTAL_FREQ 4e6
int count;
int check(int count);
void main(void){
count = 0;
TRISD = 0xBF;
count=check(count);
count=check(count);
}
int check(count){
if(count == 0){
/* blink an led for 1s */
++count;
}else if(count == 1){
/* blink an led for 2s */
++count;
}
}
但是,当我执行这个程序,两件事情发生:
如果我执行这个程序在我执行完前一个之后,指示灯闪烁1s,然后2s熄灭。
如果我在任何其他时间执行此程序,一旦它不是在前一个之后,led指示灯熄灭;甚至不眨眼。
#include <htc.h> #include <pic16f877.h> #define _XTAL_FREQ 4e6 int check(int count); int count = 0; void main(void){ TRISD = 0xBF; count=check(count); count=check(count); } int check(count){ if(count == 0){ /* blink an led for 1s */ ++count; }else if(count == 1){ /* blink an led for 2s */ ++count; } }
所以我想知道这是什么行为与我在当地宣布我的变量VS全球范围内的事情。
编译时启用警告。在'check()'里面,变量'count'不是全局变量:它是一个从参数列表中产生的局部变量。 – pmg 2015-02-08 18:17:28
int check(int count);'缺少返回语句'return count;' – francis 2015-02-08 19:46:31
行:'int check(count){'应该是'int check(int count){',并且pmg has注意到,在该参数中传递的“count”与程序顶部声明的全局“count”不同。 (顺便说一下,它会降低可读性,并提供非常有效的混淆因素)建议将函数参数从'count'改为'c'或'ct'。除了“count”之外的任何东西。 – ryyker 2015-02-08 20:00:20