为了在程序执行期间保留变量(char数组)的值,我有以下代码用在较大的代码中。但是我看到增量计数器不起作用,因为计数器被重置为零。您能在这里指出使用static的正确方法吗?
static typedef struct {
uint8_t data[8];
}count_t;
......
static count_t count;
static void incrementCtr(count_t* count) {
int i;
for (i = sizeof(count->data) - 1; i >= 0; --i) {
if (++count->data[i] != 0) {
break;
}
}
}
void myroutine{
.....
....
count_t *counter;
counter = &count;
uint32_t len = sizeof(*counter);
memset(counter ,0,sizeof(*counter));
for (i = 0; i < len; i++){
printf("counter->data[%d] = %02X\n", i, counter->data[i]);
}
.......
do {
.......
incrementCtr(counter);
for (i = 0; i < len; i++){
printf("counter->data[%d] = %02X\n", i, counter->data[i]);
}
} while (true);
return 0;
}
第一个printf显示所有字节0,在第二个printf中,字节值增加1。但是随后计数器重新初始化为0 agian :(
最佳答案
如果在头文件中定义static count_t count;
,则可能会发生。在这种情况下,对于包含此标头的任何翻译单元(cpp文件),您都有单独的count
变量。
关于c - C中的静态结构不会改变值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16789103/