宏中的注释行

时间:2009-07-15 11:58:24

标签: c objective-c macros

请帮助一个宏初学者...我创建了一个简单的宏来加载图像并将其分成几行,这样我就可以在每次执行从宏生成的代码时进行记录(用于调试)。它看起来像这样:

#define LOAD_PNG(L_I_IMAGE_NAME) ({ \
PngImageClass* __tmp; \
printf("Loading png: %s", L_I_IMAGE_NAME);\
__tmp = [image loading code here];\
__tmp; \
})

我的计划是能够在需要时轻松注释日志行(手动),但预处理器不会容忍任何正常方式。应该怎么做?!

编辑:我完全错误地说它不能正常工作“任何正常方式”,因为我一直懒得只尝试单行评论。我还会听取几个响应者的意见,将其变成一个功能。不,没有充分的理由(我猜)为此使用宏。

4 个答案:

答案 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(...);

更好的方法是不使用宏并将其转换为函数,但是,除非有非常重要的理由使用宏(但你没有给出任何宏)。