赞
踩
#include <stdio.h>
#include <stdint.h>
int main(void)
{
for((uint8_t) i = 0; i < 5; i++)
{
printf("variable i is : %d \n", i);
}
return 0;
}
变量没有定义?因为数据类型uint8_t 添加了个括号,而(type)表示强制类型转换,因此没有定义就调用,导致报错。
/* 数据打印函数指针 */ typedef void (*Print_Func)(const void *); void int16_value_print(const void * value); void uint32_value_print(const void * value); void data_output(Print_Func print, const void * value) { print(value); } /* 主函数 */ int main(void) { // int16_t s16_temp_val[10] = {-255, 3442}; // uint32_t u32_temp_val[2] = {85536, 96275}; int16_t *s16_temp_val = -255; uint32_t *u32_temp_val = 85536; data_output(uint32_value_print, (void *)u32_temp_val); data_output(int16_value_print, (void *)s16_temp_val); return 0; }
函数参数传入的该是指针所指向的具体的地址,而非数据。同时地址处该存着有效的数据
在上面中,给指针赋值的-255 和 85536都会被认为是一个地址,而且地址不能是个负值。
解决方法是给变量赋值,然后将指针指向变量的地址。
int16_t a = -255;
uint32_t b = 85536;
int16_t *s16_temp_val = &a;
uint32_t *u32_temp_val = &b;
#define STRING(s) #s typedef enum { state_white_red = 0, state_white_yellow, state_white_blue, state_white_orange, }State; typedef struct { State sta; ///< 状态对应的常量 char *str; ///< 状态对应的标识符(字符串) } ComparisonInfo; ComparisonInfo comparison_table[] = { {state_white_red, STRING(state_white_red)}, {state_white_yellow, STRING(state_white_yellow)}, {state_white_blue, STRING(state_white_blue)}, {state_white_orange, STRING(state_white_orange)}, };
statemachine.o:statemachine.c:(.data+0x0): multiple definition of `comparison_table'
任何变量都不该写在.h文件中,但是我为了将用到的数据类型和函数相分开,就写在了.h 文件中
还遇到一种情况,状态表是状态机数据类型的一部分,若将其分别写在.c 文件和 .h文件中,看起来也并不直观。
解决方法是添加static , 将其声明为局部的
static ComparisonInfo comparison_table[] =
文件和 .h文件中,看起来也并不直观。
解决方法是添加static , 将其声明为局部的
static ComparisonInfo comparison_table[] =
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。