˳ʱÕë·½·¨ ½â¶Á C ¸´ÔӺ궨Òå
[This was posted to comp.lang.c by its author, David Anderson, on 1994-05-06.]
The ``Clockwise/Spiral Rule''
By David Anderson
There is a technique known as the ``Clockwise/Spiral Rule'' which enables any C programmer to parse in their head any C declaration!
There are three simple steps to follow:
Starting with the unknown element, move in a spiral/clockwise direction; when ecountering the following elements replace them with the corresponding english statements:
[X] or [] => Array X size of... or Array undefined size of... (type1, type2) => function passing type1 and type2 returning... * => pointer(s) to...
Keep doing this in a spiral/clockwise direction until all tokens have been covered.
Always resolve anything in parenthesis first!
Example #1: Simple declaration
+-------+
| +-+ |
| ^ | |
char *str[10];
^ ^ | |
| +---+ |
+-----------+
Question we ask ourselves: What is str?
``str is an...
We move in a spiral clockwise direction starting with `str' and the first character we see is a `[' so, that means we have an array, so...
``str is an array 10 of...
Continue in a spiral clockwise direction, and the next thing we encounter is the `*' so, that means we have pointers, so...
``str is an array 10 of pointers to...
Continue in a spiral direction and we see the end of the line (the `;'), so keep going and we get to the type `char', so...
``str is an array 10 of pointers to char''
We have now ``visited'' every token; therefore we are done!
Example #2: Pointer to Function declaration
+--------------------+
| +---+ |
| |+-+| |
| |^ || |
char *(*fp)( int, float *);
^ ^ ^ || |
| | +--+|
Ïà¹ØÎĵµ£º
Boss˵£¬Òª¿´OpenGL£¬¿´ÁË¿ìÒ»¸öÔ£¬×ÜËã³öÁ˸öÏñÑùµÄ¶«Î÷£¬ÓÃCдÁ˸ö3DÃÔ¹¬£¬
ËäȻֻÓÐ350ÐÐ
´úÂ룬²»¹ý±ßѧ±ßд£¬×ã×ãдÁËÒ»ÖÜʱ¼ä£¬»¹ÊÇСÓгɾ͸е쬻î»î»î£¡
&n ......
ǰһƪÎÒÃǽéÉÜÁËÒ»¸ö¼òµ¥²»¹ýµÄhelloworld³ÌÐòÒý³öÏà¹ØÎÊÌâ¡£³Ã×Å»¹Ã»ÓÐÍüµôÄÇЩ˼¿¼·½Ê½µÄ¼ÇÒ䣬±¾Æª¼ÌÐøÑÓÐøÕâÖÖ˼ά·½Ê½µÄÀíÄ½éÉÜÒ»ÏÂCC++ÖеĻù±¾Êý¾ÝÀàÐÍ¡£Êý¾ÝÀàÐͲ»Çå³þµÄ»°ÔÚÒÔºóµÄ±à³ÌÖлáÓкܶàÃÕÍźÍÎÊÌâ¡£ÉõÖÁÒ»¸ö³ÌÐòµÄBUGÕÒ°ëÌìҲûÓÐÕÒ³öÀ´Ê±ÎªÊ²Ã´£¬½á¹û²Å·¢ÏÖÊǼӼõÒç³öÁË¡£¸ü¼ÓÑÏÖØµÄ»¹ÓÐдԽ½ç¡¢¶ÁÔ ......
×î½üÒ»Ö±Ñо¿Ò»¸ö¶Ô¸öÈ˶øÑÔºÜÓмÛÖµµÄÒ»¸öLIB¿âµÄÄæÏò¡£ÔÚ½ñÌìϰàºóͻȻÁé¸ÐÉÁÏÖ£¬Õâ¸ö¶Ï¶ÏÐøÐøÄæÁ˽ӽüÒ»ÖܵĺËÐĹÜÀíÀà¡£ÖÕÓÚÔÚ½ñÌì¸øÄæÍêÁË¡£ÔÚ×îºóÒ»¸öº¯ÊýÀÅöµ½ÁË֮ǰ»ù±¾Ã»ÓÐÓùýµÄÒ»ÌõÖ¸Áî¡££¨ºÇºÇ£¬¸ßÊÖ¼ûЦÁË£¡£©µ±È»¹â¿´µ¥¾äµÄ»ã±àÖ¸ÁÊÇûÓа취¿´³ö¾ßÌåµÄ×÷Óõ쬶øÇÒ»¹ºÜ¿ÉÄÜ»áÈÏΪÔ×÷Õß±¾À´¾ÍÊÇÓû㱠......
ÏÈ·¢±íÒ»ÏÂÓÞ¼û£¬»¶Ó´ó»ï¶ùÅÄש£º
Visual C++£ºWindowsƽ̨ÉÏ×îÁ÷ÐеıàÒëÆ÷£¬ºÍVS¼¯³ÉµÄºÜºÃ£¬±àÒëЧÂʺͱàÒëºóµÄ´úÂëЧÂʶ¼²»´í£¬µ«ÊÇ£¬³ýÁ˱ȽϺÃÓÃÖ®Í⣬ºÃÏóûÓÐÌØ±ðÍ»³öµÄ...¶øÇÒ£¬Ö§³ÖµÄÓ²¼þƽ̨ºÃÏóÖ»ÓÐX86µÄ...
GCC/G++£º¿ªÔ´µÄ£¬Linux/Unixƽ̨ÉϵÄÊ×Ñ¡£¬¶øÇÒÖ§³ÖNÖÐÓ²¼þƽ̨£¬Èç¹ûÏë½øÐÐ¿çÆ½Ì¨±àÒëµÄ»°£¬Õâ ......
@echo --------------------- ÓÃÓÚ¡¶Ò»¸ö²Ù×÷ϵͳµÄʵÏÖ¡·µÄ cmd ---------------------
@echo off
mode con cols=80 lines=60 ::ǰһ¸öÊý×Ö»ò×ÖĸΪ±³¾°É«£¬ºóÒ»¸öÊý×Ö»òÕß×ÖĸΪǰ¾°É«£¬ÏÂÃæÊÇһЩÑÕÉ«¶ÔÓ¦µÄÊý×Ö»ò×Öĸ£º
::0£½ºÚ¡¢1£½À¶¡¢2£½ÂÌ¡¢3£½Ç³ÂÌ¡¢4£½ºì¡¢5£½×Ï¡¢6£½»Æ¡¢7=°×¡¢8=»Ò¡¢9=µÀ¶¡¢A£½µ ......