在阅读ls.c的源码时,有以下的断言,这个是在编译时进行检测的:
/* Ensure that filetype and filetype_letter have the same
number of elements. */
verify (sizeof filetype_letter - 1 == arg_directory + 1);
以下一步一步给出verify的定义:
#ifdef __GNUC__
# define verify(R) _GL_VERIFY (R, "verify (" #R ")")
#else
/* PGI barfs if R is long. Play it safe. */
# define verify(R) _GL_VERIFY (R, "verify (...)")
#endif
#ifdef _GL_HAVE__STATIC_ASSERT
# define _GL_VERIFY _Static_assert
#else
# define _GL_VERIFY(R, DIAGNOSTIC) \
extern int (*_GL_GENSYM (_gl_verify_function) (void)) \
[_GL_VERIFY_TRUE (R, DIAGNOSTIC)]
#endif
在我的电脑系统Ubuntu上,verify最终定义为_Static_assert,这是C11的一个新特性,在编译时检查条件是否满足。另外,在宏定义中,#表示把参数当成字符串处理。
来源:CSDN
作者:guobaoteacher
链接:https://blog.csdn.net/u012159565/article/details/103832754