C的隐藏功能
我知道所有C编译器实现背后都有一个标准,所以不应该有隐藏的特性。 尽管如此,我确信所有C开发人员都有他们始终使用的隐藏/秘密技巧。
函数指针。 您可以使用一个函数指针表来实现例如快速间接线程代码解释器(FORTH)或字节码调度器,或模拟类OO虚拟方法。
然后在标准库中存在隐藏的宝石,例如qsort(),bsearch(),strpbrk(),strcspn()[后两者对于实现strtok()替换有用)。
C的错误特征是带符号的算术溢出是未定义的行为(UB)。 因此,无论何时您看到像x + y这样的表达式都是有符号整数的,它可能会溢出并导致UB。
更多GCC编译器的技巧,但你可以给编译器提供分支指示提示(在Linux内核中很常见)
#define likely(x) __builtin_expect((x),1)
#define unlikely(x) __builtin_expect((x),0)
请参阅:http://kerneltrap.org/node/4705
我喜欢的是它也增加了一些功能的表现力。
void foo(int arg)
{
if (unlikely(arg == 0)) {
do_this();
return;
}
do_that();
...
}
int8_t
int16_t
int32_t
uint8_t
uint16_t
uint32_t
这些是标准中的可选项目,但它必须是隐藏功能,因为人们不断重新定义它们。 我曾经工作过的一个代码库(现在仍然是这样)具有多重定义,所有代码都有不同的标识符。 大部分时间都是预处理器宏:
#define INT16 short
#define INT32 long
等等。 这让我想把我的头发拉出来。 只需使用freaking的标准整数typedefs!
链接地址: http://www.djcxy.com/p/73575.html上一篇: Hidden features of C
下一篇: What is the correct way to initialize a very large struct?