记录C/CPP当中一些隐晦的问题,并非著名的C Traps and Pitfalls,虽然有可能包含一些相同的点。
1、类型退化(隐式转换)问题
#include <stdio.h> #define SIZEOF(A) \ sizeof(A) / sizeof(A[0]) inline static int sizeOfCharArray(char a[]) { return sizeof(a) / sizeof(a[0]); // type casting by default } int main(int argc, char **argv) { char a[10]; a[0] = 5; a[9] = 8; void *p = &a; // do it explicitly printf("sizeof char array %d %lu %lu\n", sizeOfCharArray(a), sizeof((char*) p), SIZEOF(a)); return 0; }
注意这段程序当中sizeOfCharArray方法,其实在很多情况都会有隐式转换,但是和sizeof一起用的时候要注意。
2、多层循环,效率问题
http://rednaxelafx.iteye.com/blog/352730