simplecpp icon indicating copy to clipboard operation
simplecpp copied to clipboard

unexpanded inner macro

Open danmar opened this issue 7 years ago • 1 comments

Example code:

#define MAC2STR(x) x[0],x[1],x[2],x[3],x[4],x[5]
#define FT_DEBUG(fmt, args...) if(pGlobalCtx && pGlobalCtx->debug_level>=2) printf("FT-dbg: "fmt, ##args)

FT_DEBUG("  %02x:%02x:%02x:%02x:%02x:%02x\n", MAC2STR(pCtx->wlan_intf_addr[i]));

Simplecpp does not preprocess this code properly. The MAC2STR is not expanded.

danmar avatar May 20 '18 21:05 danmar

gcc -E

# 0 "a.cpp"
# 0 "<built-in>"
# 0 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 0 "<command-line>" 2
# 1 "a.cpp"



if(pGlobalCtx && pGlobalCtx->debug_level>=2) printf("FT-dbg: "fmt, pCtx->wlan_intf_addr[i][0],pCtx->wlan_intf_addr[i][1],pCtx->wlan_intf_addr[i][2],pCtx->wlan_intf_addr[i][3],pCtx->wlan_intf_addr[i][4],pCtx->wlan_intf_addr[i][5]);

clang -E

# 1 "a.cpp"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 480 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "a.cpp" 2



if(pGlobalCtx && pGlobalCtx->debug_level>=2) printf("FT-dbg: ""  %02x:%02x:%02x:%02x:%02x:%02x\n", pCtx->wlan_intf_addr[i][0],pCtx->wlan_intf_addr[i][1],pCtx->wlan_intf_addr[i][2],pCtx->wlan_intf_addr[i][3],pCtx->wlan_intf_addr[i][4],pCtx->wlan_intf_addr[i][5]);

Current output:

1:
2: 
3: 
4: if ( pGlobalCtx && pGlobalCtx -> debug_level >= 2 ) printf ( "FT-dbg: " "  %02x:%02x:%02x:%02x:%02x:%02x\n" , pCtx -> wlan_intf_addr [ i ] [ 0 ] , pCtx -> wlan_intf_addr [ i ] [ 1 ] , pCtx -> wlan_intf_addr [ i ] [ 2 ] , pCtx -> wlan_intf_addr [ i ] [ 3 ] , pCtx -> wlan_intf_addr [ i ] [ 4 ] , pCtx -> wlan_intf_addr [ i ] [ 5 ] ) ;

firewave avatar Jul 03 '25 11:07 firewave