C is a great programming language , very fast , almost low level but its because the responsibility to write a good working code (and secure) is the developer.
Array access , type casts, function parameters and more are not checked by the runtime so if you do something wrong – you crash
It is important for any C developer to be familiar with some pitfalls. Let see some , try to think what will be printed and check the answers bellow
Note: There is no compilation errors in all the following pitfalls
Pitfall 1
typedef struct { int a; int b; }T1; int main(void) { int a=90,res; T1 m = {10,20}; T1 *p = &m; res = p-->a; printf("res=%d\n",res); return 0; }
Pitfall 2
int main(void) { int x=10; if(x > 30,400) printf("yes\n"); else printf("no\n"); x=100; if(x > 30,400) printf("yes\n"); else printf("no\n"); return 0; }
Pitfall 3
int main(void) { int x=100,y=20,res; int *p,p1; int *q; p=&x; q=&y; p1=p; res = *p/*q; /* redirect access */ *p1++; printf("res=%d\n",res); return 0; }
Pitfall 4
int main(void) { int x=10,y=20,res; res=x---y; printf("res=%d x=%d y=%d\n",res,x,y); return 0; }
Pitfall 5
int main(void) { int f=0x2; // 0010 int x=0x8; // 1000 int r1,r2; if(x | f != 10) printf("yes\n"); else printf("no\n"); r1 = x * 8 + 1; r2 = x << 3 + 1; if(r1==r2) printf("yes\n"); else printf("no\n"); return 0; }
Pitfall 6
int main(void) { int x=10,y=20,res; switch(x) { case 2: y=10; break; case 4: y=33; break; case 6: y=44; break; case 8: y=55; break; defualt: y=100; break; } printf("y=%d\n",y); return 0; }
Pitfall 7
int fn(int x, unsigned int factor) { return x / factor; } int main(void) { int x=-20,y=10,res; res = fn(x,y); printf("y=%d\n",res); return 0; }
who got 7/7 ?
2 thoughts on “C Pitfalls – Test yourself (what will be printed)”
Comments are closed.
Devlish – but great fun to solve.
Yes, I did 7/7… Use vim, it has both syntax coloring and vi compatibility, and it runs on Linux and Windows, and is useful to know when you work with a bare-bones Linux