请帮助一个宏初学者...我创建了一个简单的宏来加载图像并将其分成几行,这样我就可以在每次执行从宏生成的代码时进行记录(用于调试)。它看起来像这样:
#define LOAD_PNG(L_I_IMAGE_NAME) ({ \
PngImageClass* __tmp; \
printf("Loading png: %s", L_I_IMAGE_NAME);\
__tmp = [image loading code here];\
__tmp; \
})
我的计划是能够在需要时轻松注释日志行(手动),但预处理器不会容忍任何正常方式。应该怎么做?!
编辑:我完全错误地说它不能正常工作“任何正常方式”,因为我一直懒得只尝试单行评论。我还会听取几个响应者的意见,将其变成一个功能。不,没有充分的理由(我猜)为此使用宏。答案 0 :(得分:10)
你可以这样做:
#define LOAD_PNG(L_I_IMAGE_NAME) ({ \
PngImageClass* __tmp; \
/*printf("Loading png: %s", L_I_IMAGE_NAME);*/\
__tmp = [image loading code here];\
__tmp; \
})
单行注释//
根本不起作用,因为您特别要求编译器通过在每行末尾提供反斜杠(\
)来继续这些行。
答案 1 :(得分:2)
因为宏是一行(通过行连续),所以不能在其中使用'#if 0'或'//' - 样式注释。 / ** /应该可以正常工作。
从您发布的代码段中看,无论如何它看起来都不应该是宏。只有在以某种方式利用文本替换时才会使用宏(例如,需要变量和变量名称)。
答案 2 :(得分:1)
为什么围绕宏语句有括号?一旦你遇到预处理器问题并且你当然不需要它就不能编译。
答案 3 :(得分:0)
除了/.../样式评论之外,您还可以这样做:
if (0) printf(...);
更好的方法是不使用宏并将其转换为函数,但是,除非有非常重要的理由使用宏(但你没有给出任何宏)。