error C2371 int_fast16_t 重定义不同的基类型

在编译DLL时遇到与VS2015类型冲突的错误,原代码为VS2010。解决办法是在代码前加入预处理器指令,针对不同版本的Visual Studio进行条件编译,避免类型冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编译DLL时出现这个错误。通过错误提示发现和VS2015中的一个类型相同了(原来代码是VS2010)。

解决方法: 在自己代码前面加

#if _MSC_VER < 1600

。。。。。。

#endif;

中间是出错部分。

PS:初步总结是vs版本的问题,我看论坛其他人也碰见这个问题。vs2010重新编译vc6.0工程的代码,也出现了这个问题

比如下面这个地址:

https://blog.youkuaiyun.com/dddxxxx/article/details/73527553

#include "hard_i2c.h" #include "delay.h" //SCL PB4 SDA PB5 //IIC初始化 void I2c_config(void) { GPIO_Config_T gpioConfig; //GPIO_ConfigStructInit(&gpioConfig);//GPIO_Config_T 结构体的各个成员初始化 gpioConfig.mode = GPIO_MODE_OUT_OD; gpioConfig.pin = GPIO_PIN_4 | GPIO_PIN_5; gpioConfig.speed = GPIO_SPEED_10MHz; GPIO_Config(GPIOB, &gpioConfig); GPIO_SetBit(GPIOB, GPIO_PIN_4); GPIO_SetBit(GPIOB, GPIO_PIN_5); RCM_EnableAPBPeriphClock(RCM_PERIPH_I2C); I2C_Config_T i2cconfig; i2cconfig.ack = I2C_ACK_CURRENT; i2cconfig.addr = 0x00; i2cconfig.addrMode = I2C_ADDR_7_BIT; i2cconfig.dutyCycle = I2C_DUTYCYCLE_2; i2cconfig.inputClkFreqMhz = 48; i2cconfig.interrupt = I2C_INT_EVENT | I2C_INT_ERROR; i2cconfig.outputClkFreqHz = 100000; I2C_Config(&i2cconfig); I2C_Enable(); } //主机模式发送数据 //slaveAddr: 7位从机地址 //pData: 指向数据缓冲区的指针 //dataSize: 要发送的字节数 void I2C_MasterSend(uint8_t slaveAddr, uint8_t *pData, uint16_t dataSize) { //生成START条件 I2C_EnableGenerateStart(); //等待START标志置位 while (I2C_ReadStatusFlag(I2C_FLAG_START) != SET); //发送从机地址(写方向) I2C_TxAddress7Bit(slaveAddr, I2C_DIRECTION_TX); //等待地址发送完成 while (I2C_ReadStatusFlag(I2C_FLAG_ADDR) != SET); //通过读取STS1和STS3寄存器清除ADDR标志 uint8_t temp = I2C->STS1; temp = I2C->STS3; (void)temp; //防止编译器警告 //发送数据字节 while (dataSize--) { //等待发送缓冲区为空 while (I2C_ReadStatusFlag(I2C_FLAG_TXBE) != SET ); //发送数据字节 I2C_TxData(*pData++); //等待字节传输完成 while (I2C_ReadStatusFlag(I2C_FLAG_BTC) != SET); } //生成STOP条件 I2C_EnableGenerateStop(); } //主机模式接收数据 //slaveAddr: 7位从机地址 //pData: 指向数据缓冲区的指针 //dataSize: 要接收的字节数 void I2C_MasterReceive(uint8_t slaveAddr, uint8_t *pData, uint16_t dataSize) { //多字节接收时使能ACK I2C_ConfigAcknowledge(I2C_ACK_CURRENT); //生成START条件 I2C_EnableGenerateStart(); //等待START标志置位 while (!I2C_ReadStatusFlag(I2C_FLAG_START)); //发送从机地址(读方向) I2C_TxAddress7Bit(slaveAddr, I2C_DIRECTION_RX); //等待地址发送完成 while (!I2C_ReadStatusFlag(I2C_FLAG_ADDR)); //通过读取STS1和STS3寄存器清除ADDR标志 uint8_t temp = I2C->STS1; temp = I2C->STS3; (void)temp; //防止编译器警告 //接收数据字节 while (dataSize--) { //接收最后一个字节时,禁用ACK并发送STOP if (dataSize == 1) { I2C_ConfigAcknowledge(I2C_ACK_NONE); I2C_DisableGenerateStop(); } //等待数据接收完成 while (!I2C_ReadStatusFlag(I2C_FLAG_RXBNE)); //读取接收到的数据 *pData++ = I2C_RxData(); } } APM32iic这样写有什么问题吗??
07-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值