2017-03-05 97 views
0

有两种类型的宏 - function-like macrosobject-like macros。我可以像对象宏执行各种检查/操作:#ifdef,#ifndef和#undef是否与函数式宏一起工作?

#ifdef _SOME_OBJECT_LIKE_MACRO // check if some object-like macro is defined 
#undef _SOME_OBJECT_LIKE_MACRO // undefine some object-like macro 
#endif 

#define _SOME_OBJECT_LIKE_MACRO 0xff 

#ifdef#ifndef#undef工作,函数宏?例如:

#ifdef _SOME_FUNCTION_LIKE_MACRO() // check if some function-like macro is defined 
#undef _SOME_FUNCTION_LIKE_MACRO() // undefine some function-like macro 
#endif 

#define _SOME_FUNCTION_LIKE_MACRO() printf("This is such a useful macro!!!\n"); 

这是否行得通?如果没有,我怎么能......

  • 检查
  • 存在检查存在
  • 取消定义

...一个函数宏?

+2

您应该注意,以下划线开头的名称以及大写字母或另一个下划线是绝对保留供实现使用的 - 您不应在自己的代码中创建此类名称(尽管您可能使用系统提供的名称像那样)。事实上,你可能完全避免使用前导下划线。 –

回答

2

#ifdef#ifndef#undef使用类似函数的宏,但只需要使用裸宏名称。不需要括号:

#ifdef _SOME_FUNCTION_LIKE_MACRO 
#undef _SOME_FUNCTION_LIKE_MACRO 
#endif 

另请参阅http://tigcc.ticalc.org/doc/cpp.html#SEC19

+2

请注意,'#undef'之前不需要测试;该标准一直规定'#undef UNDEFINED_MACRO'不是错误。 –

相关问题