在包含了windows.h和af_irda.h的情况下,以下代码在C++编译器中可以编译而没有错误,但是在C编译器中在结构赋值下面就会报错(见ERROR)。理想情况下,我想初始化结构成员“ID”为字符数组,同时保持它的类型与原始代码完全相同,以便我可以在从PC socket连接调用设备进行查询时测试LXdeviceInfo的值。
“是否有一些方法可以修改这个赋值块,使之在纯C中工作?”
#include <windows.h>
#include <af_irda.h>
#define IR_HINT_COMPUTER 0x04
#define IR_HINT_EXT 0x80
#define IR_HINT_OBEX 0x20
#define IR_HINT_IRCOMM 0x04
#define IR_CHAR_ASCII 0
#define PROD_FAMILY_NAME ("product name goes here")
#define uint8_t unsigned char
const struct {
uint8_t hint1;
uint8_t hint2;
uint8_t charset;
uint8_t ID[sizeof(PROD_FAMILY_NAME)];
} devInfoStorage =
{
IR_HINT_COMPUTER | IR_HINT_EXT, // hint1
IR_HINT_OBEX | IR_HINT_IRCOMM, // hint2
IR_CHAR_ASCII, // charset
PROD_FAMILY_NAME // Prod ID string
}; // ERROR here: Innvalid initialization type: found 'pointer to char' expected 'unsigned char'
const uint8_t *LXdeviceInfo = (uint8_t *) &devInfoStorage;
/* The size of the device info */
const uint8_t LXdeviceInfoLen = sizeof(devInfoStorage);
void main(void)
{
#define DEVICE_LIST_LEN 10
unsigned char DevListBuff[sizeof (DEVICELIST) -
sizeof (IRDA_DEVICE_INFO) +
(sizeof (IRDA_DEVICE_INFO) * DEVICE_LIST_LEN)];
int DevListLen = sizeof (DevListBuff);
PDEVICELIST pDevList;
pDevList = (PDEVICELIST) & DevListBuff;
//code continues.
}
const
和typedef
等效项怎么样? - greatwolfint main(void)
,不是void main(void)
。如果你有一本教材告诉你void main(void)
是正确的,那么你需要找一本更好的教材。 - Keith Thompsonmain
具有除int
以外的返回类型。)对于独立实现,程序的入口点完全由实现定义,并且甚至可能不被称为“main”。 - Keith Thompson