我正在尝试构建UDP 1.4.1 (例如,这个版本使用LwIP供应商),我想为UDP构建带有诊断消息的版本。问题:在调试器h条件下,#ifdef LWIP_DEBUG构建为未定义的,但是如果#define LWIP_DEBUG exist警告要重新定义它。
更新:它可以在四个文件中重复使用。
udp.c
#include "lwip/opt.h"
err_t
udp_bind(struct udp_pcb *pcb, ip_addr_t *ipaddr, u16_t port)
{
// My comment
LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_bind(ipaddr = "));
return ERR_OK;
}opt.h
#ifndef __LWIP_OPT_H__
#define __LWIP_OPT_H__
#include "lwipopts.h"
#include "lwip/debug.h"
#endif /* __LWIP_OPT_H__ */lwipopts.h
#ifndef __LWIPOPTS_H__
#define __LWIPOPTS_H__
#include "lwipopts.h"
#include "lwip/debug.h"
#define LWIP_DEBUG 1
#define UDP_DEBUG LWIP_DBG_ON
#endif /* __LWIPOPTS_H__ */和调试器
#ifndef __LWIP_DEBUG_H__
#define __LWIP_DEBUG_H__
#include "lwip/opt.h"
//#define LWIP_DEBUG exist
#ifdef LWIP_DEBUG
#define LWIP_DEBUGF(debug, message) do { if ((debug) & 0x80U) { \
LWIP_PLATFORM_DIAG(message); \
} } while(0)
#else /* LWIP_DEBUG */
#define LWIP_DEBUGF(debug, message)
#endif /* LWIP_DEBUG */
#endif /* __LWIP_DEBUG_H__ */发布于 2022-09-06 09:49:16
如果您试图在多个标头中同时从.c文件中定义它,则每个标头需要执行以下操作:
#ifndef LWIP_DEBUG
#define LWIP_DEBUG 1
#endif或者另一种选择:
#undef LWIP_DEBUG
#define LWIP_DEBUG 1发布于 2022-09-07 03:42:49
我发现了问题:从lwipopts.h中删除任何包含。
它在两个文件中复制,udp.c和lwipopts.h
#ifndef __LWIPOPTS_H__
#define __LWIPOPTS_H__
#include "lwipopts.h"
//#include "lwip/debug.h"
/* REDUCED BODY BEGIN */
//#define LWIP_DEBUG exist
#ifdef LWIP_DEBUG
#define LWIP_DEBUGF(debug, message) do { printf("%d, %s\n", debug, message); } while(0)
#else /* LWIP_DEBUG */
#define LWIP_DEBUGF(debug, message)
#endif /* LWIP_DEBUG */
/* REDUCED BODY END */
#define LWIP_DEBUG 1
#define UDP_DEBUG LWIP_DBG_ON
#endif /* __LWIPOPTS_H__ */定义LWIP_DEBUG后的#ifdef LWIP_DEBUG条件。这是因为用户lwipopts.h包含
#include "lwipopts.h"
#include "lwip/debug.h"lwipopts.h不应包含任何包含指令!稍微解释一下:应该是怎样的
#include "lwip/opt.h"
#include "lwipopts.h"
// BODY lwipopts.h
#include "lwip/debug.h"
//#include "opt.h" /* guarded */
// BODY debug.h如何在吉特努沃顿(减少):
#include "lwip/opt.h" /* udp.c */
#include "lwipopts.h"
//#include "lwipopts.h" /* guarded */
#include "lwip/debug.h"
//#include "lwip/opt.h" /* guarded */
// BODY debug.h
// BODY lwipopts.h
//#include "lwip/debug.h" /* guarded */
//#include "lwip/opt.h" /* guarded */因此,调试器的主体和lwipopts.h交换了。
https://stackoverflow.com/questions/73619141
复制相似问题