C traps and Puzzles
ÏÂÃæµÄÀý×Ó¶¼ÔÚUbuntu8.04 GCCϱàÒëµÄ½á¹û£¬ÓÐЩûÓиø½á¹û
±à³ÌÒ»¶¨Òª×Ô¼º¶¯ÊÖÊÔÒ»ÊÔ£¡
1.¶¨ÒåÓëÉùÃ÷£¬¶¨ÒåÒª·ÖÅäÄڴ棬ÉùÃ÷Ö»ÊÇÉùÃ÷Ôڱ𴦶¨ÒåÁË
int a; //¶¨Òå
extern int a; //ÉùÃ÷
char str[100]
extern char str[] //ok
char * str[]
extern char str[] //error
char str[100]
extern char * str //error
Êý×éºÍÖ¸ÕëÊÇÁ½ÂëÊ£¡Ö»ÊÇÔÚijЩÇé¿öÏÂΪÁ˼ò»¯±àÒë¶¼µ±×öÖ¸Õë´¦Àí
2.register ²»ÄÜÓÃȡַÔËËã·û£¬ÒòΪ¿ÉÄܲ»´æ·ÅÔÚÄÚ´æÖÐ.
#include <stdio.h>
int main(void)
{
register int r=10;
int * ptr=&r;
printf("%d\n",*ptr);
return 0;
}
3.sizeofÊǹؼü×Ö²»ÊǺ¯ÊýÒ²²»ÊǺê
(define ²»Êǹؼü×Ö)£¬sizeofÔÚ±àÒëµÄʱºò¾ÍÈ·¶¨ÁË£¬ÓɱàÒëÆ÷Ëã³ö
int i=0;
sizeof(i) //4 ok
sizeof(int) //4 ok
sizeof i //4 ok
sizeof int //error!
int *p=NULL;
sizeof(p) //ok 4
sizeof(*p) //ok 4!
int a[100];
sizeof(a) //100
sizeof(&a) //4
sizeof(&a[0]) //4
enum{A,B,C}e;
sizeof(e) //4
4.void Ö¸Õë
ANSI¹æ¶¨ÒÔ²»ÄܶÔvoid Ö¸Õë½øÐÐËã·¨²Ù×÷
void * vPtr;
vPtr++; //error
vPtr+=1; //error
µ«ÔÚGNUÖÐ
ÓÃGCC±àÒë¶¼ÊǺϷ¨µÄ£¡
ÓÃG£«£«±àÒëcppÎļþÈ·ÊDz»ºÏ·¨µÄ£¡
VCûÊÔ¹ý²»ÖªµÀ¡£
5.volatile¹Ø¼ü×Ö
¸æËß±àÒëÆ÷ÿ´ÎʹÓñäÁ¿ÖµµÄʱºò¶¼ÊÇ´ÓÄÚ´æÖжÁ³ö£¬¶ø²»½øÐÐÈκÎÓÅ»¯£¬³£ÓÃÔÚ¶àÏ̱߳à³ÌÖС£
6.¿Õ½á¹¹Ìå¿ÕÀà
struct st{}st;
class cl{}cl;
g++±àÒë½á¹ûsizeof(st)=1 sizeof(cl)=1;
gcc sizeof(st)=0!
7.fleible array
C99ÖУ¬½á¹¹ÌåµÄ×îºóÒ»¸öÔªËØÔÊÐíÊÇ´óСδ֪µÄÊý×飬µ«Õâ¸öÊý×éÇ°Ãæ±ØÐëÓÐÒ»¸öÆäËûÀàÐ͵ijÉÔ±
struct F{int i; char a[0];} sizeof(F)=4
struct F1{int i;char a[];} sizeof(F1)=4
F1 * f1;
f1=(F1 *)malloc(sizeof(struct F1)+100*sizeof(char));/*¸øf1·ÖÅä4+100byteµÄ¿Õ¼ä£¬ÕâÑùÊý×éa¾ÍÓÐ100¸öÔªËØÁË*/
sizeof(f1)=4 //!»¹ÊÇ4£¬ËµÃ÷sizeofÊÇÔÚ±àÒëµÄʱºò¾ÍÈ·¶¨ÁË£¡
8.±àд³ÌÐò²âÊÔbig/small endian
bool smallEndian(void)
{
union endian{int i;char ch;}
Ïà¹ØÎĵµ£º
static char *file2memory(FILE *file, long *size)
{
char buffer[1024];
char *string=NULL;
char *newstring=NULL;
long len=0;
long stringlen=0;
if(file) {
while((len = fread(buffer, 1, sizeof(buffer), f ......
----------------------------------------------------------------------------------------------------------------------------------------
/**/
/*
********************************************************************************************************
* @Description:s3c2410µÄrtcÇý¶¯µÄʵ ......
VB
If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
MSComm1.CommPort = i1
MSComm1.PortOpen = True
MSComm1.InputMode = comInputModeBinary
MSComm1.InBufferCount = 0
& ......
µ±½ñÓÐÐí¶àÃâ·ÑµÄ RDBMS£¨Relational Database Management
System£¬¹ØÏµÊý¾Ý¿â¹ÜÀíϵͳ£©£¬ÆäÖÐһЩÊÇ¿ª·ÅÔ´ÂëÈí¼þ£¬ÁíһЩÊÇÉÌÒµ³§ÉÌÌṩµÄÃâ·Ñ²úÆ·¡£Èç¹ûÄúÕýÔÚʹÓà C/C++¡¢Java™¡¢.NET
»ò PHP
¿ª·¢Ó¦ÓóÌÐò£¬ÏëѰÕÒÒ»ÖÖ¿É¿¿µÄÊý¾Ý·þÎñÆ÷£¬Ï£ÍûËüÖ§³ÖÏȽøµÄ¼¼Êõ¡¢¾ßÓв»¶ÏÀ©´óµÄ¿ª·¢ÈËÔ±ÉçÇø²¢ÒѾ²¿ÊðÔÚÐí¶à¹Ø¼ ......