union、.c 和 .h 文件中的 Typedef 嵌套结构
Typedef nested structure in union, .c and .h file
我应该如何在头文件中声明这个联合?
#include <avr/io.h>
#include <stdint.h>
#include <stdio.h>
#include "i2c_twi.h"
#define DS3231_ADDR 0xd0
typedef union {
uint8_t bytes[7];
struct{
uint8_t ss;
uint8_t mm;
uint8_t hh;
uint8_t dayOfWeek;
uint8_t day;
uint8_t month;
uint8_t year;
};
} TDATETIME;
TDATETIME dateTime;
我这样声明的,我不能在我的主函数中使用dataTime
:
#include <stdint.h>
#ifndef DS3231_H_
#define DS3231_H_
typedef union _TDATETIME TDATETIME
#endif /* DS3231_H_ */
编译器生成以下错误:
../main.c:42:26: error: ‘dateTime’ undeclared (first use in this function)
DS3231_get_dateTime( &dateTime );
In C, you must use the union keyword to declare a union variable. In
C++, the union keyword is unnecessary:
union TDATETIME dateTime;
发件人:https://msdn.microsoft.com/en-us/library/5dxy4b7b(v=vs.80).aspx
你想做什么?
typedef union _TDATETIME TDATETIME;
或 typedef union TDATETIME _TDATETIME;
如果头文件中的结构如下,那么"TDATETIME dateTime"应该在.c文件中。
typedef 联合 {
...
}
日期时间;
供您参考
如果你所有的头文件都是这样的:
typedef union _TDATETIME TDATETIME;
那只是设置了typedef,并没有定义union。您需要同时定义 union 和它附带的 typedef。另外,如果你想在多个文件中使用这种类型的变量,请在头文件中为该变量放置一个 extern
声明,然后在一个 C 文件中定义它:
在ds3231.h中:
#include <stdint.h>
#ifndef DS3231_H_
#define DS3231_H_
typedef union {
uint8_t bytes[7];
struct{
uint8_t ss;
uint8_t mm;
uint8_t hh;
uint8_t dayOfWeek;
uint8_t day;
uint8_t month;
uint8_t year;
};
} TDATETIME;
extern TDATETIME dateTime;
#endif /* DS3231_H_ */
在ds3221.c中:
#include "ds3221.h"
TDATETIME dateTime;
在main.c中:
#include <stdio.h>
#include "ds3221.h"
int main()
{
...
// use dateTime
...
}
我应该如何在头文件中声明这个联合?
#include <avr/io.h>
#include <stdint.h>
#include <stdio.h>
#include "i2c_twi.h"
#define DS3231_ADDR 0xd0
typedef union {
uint8_t bytes[7];
struct{
uint8_t ss;
uint8_t mm;
uint8_t hh;
uint8_t dayOfWeek;
uint8_t day;
uint8_t month;
uint8_t year;
};
} TDATETIME;
TDATETIME dateTime;
我这样声明的,我不能在我的主函数中使用dataTime
:
#include <stdint.h>
#ifndef DS3231_H_
#define DS3231_H_
typedef union _TDATETIME TDATETIME
#endif /* DS3231_H_ */
编译器生成以下错误:
../main.c:42:26: error: ‘dateTime’ undeclared (first use in this function)
DS3231_get_dateTime( &dateTime );
In C, you must use the union keyword to declare a union variable. In C++, the union keyword is unnecessary:
union TDATETIME dateTime;
发件人:https://msdn.microsoft.com/en-us/library/5dxy4b7b(v=vs.80).aspx
你想做什么?
typedef union _TDATETIME TDATETIME;
或typedef union TDATETIME _TDATETIME;
如果头文件中的结构如下,那么"TDATETIME dateTime"应该在.c文件中。
typedef 联合 {
... } 日期时间;
供您参考
如果你所有的头文件都是这样的:
typedef union _TDATETIME TDATETIME;
那只是设置了typedef,并没有定义union。您需要同时定义 union 和它附带的 typedef。另外,如果你想在多个文件中使用这种类型的变量,请在头文件中为该变量放置一个 extern
声明,然后在一个 C 文件中定义它:
在ds3231.h中:
#include <stdint.h>
#ifndef DS3231_H_
#define DS3231_H_
typedef union {
uint8_t bytes[7];
struct{
uint8_t ss;
uint8_t mm;
uint8_t hh;
uint8_t dayOfWeek;
uint8_t day;
uint8_t month;
uint8_t year;
};
} TDATETIME;
extern TDATETIME dateTime;
#endif /* DS3231_H_ */
在ds3221.c中:
#include "ds3221.h"
TDATETIME dateTime;
在main.c中:
#include <stdio.h>
#include "ds3221.h"
int main()
{
...
// use dateTime
...
}