coreutils-8.28的ls.c源码阅读一

帅比萌擦擦* 提交于 2020-01-04 15:48:42

    在阅读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的一个新特性,在编译时检查条件是否满足。另外,在宏定义中,#表示把参数当成字符串处理。

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!