就算使用得当也很容易出问题

Git 项指标源码幸免开荒者使用 C
规范库中的有个别函数,原因是那么些函数太轻易被误用,即使使用特出也相当轻便出难题。因而Git 的源码增添了二个 banned.h
的头函数,一旦您选拔了那几个被剥夺的函数,将要编写翻译时报错。

这一个函数包涵:

 #ifndef BANNED_H
#define BANNED_H

/*
 * This header lists functions that have been banned from our code base,
 * because they're too easy to misuse (and even if used correctly,
 * complicate audits). Including this header turns them into compile-time
 * errors.
 */

#define BANNED(func) sorry_##func##_is_a_banned_function

#undef strcpy
#define strcpy(x,y) BANNED(strcpy)
#undef strcat
#define strcat(x,y) BANNED(strcat)
#undef strncpy
#define strncpy(x,y,n) BANNED(strncpy)
#undef strncat
#define strncat(x,y,n) BANNED(strncat)

#undef sprintf
#undef vsprintf
#ifdef HAVE_VARIADIC_MACROS
#define sprintf(...) BANNED(sprintf)
#define vsprintf(...) BANNED(vsprintf)
#else
#define sprintf(buf,fmt,arg) BANNED(sprintf)
#define vsprintf(buf,fmt,arg) BANNED(sprintf)
#endif

#endif /* BANNED_H */

banned.h 源码  

(文/开源中中原人民共和国卡塔尔(قطر‎