亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
樓主: KBTiller
打印 上一主題 下一主題

拙著《狂人C》出版,特邀CU網(wǎng)友垂注,并歡迎品頭論足、批評指正 [復制鏈接]

論壇徽章:
0
281 [報告]
發(fā)表于 2010-12-07 20:29 |只看該作者
我讀了幾頁,就說下面這段話吧
   
我覺得講的非常好,變量名本身也占用內(nèi)存,所謂這個變量的地址就是 ...
hobbs136 發(fā)表于 2010-11-30 17:12



    變量名本身也占用內(nèi)存這個 不對,我跑題了

論壇徽章:
2
技術圖書徽章
日期:2013-09-04 15:21:51酉雞
日期:2013-11-01 21:20:20
282 [報告]
發(fā)表于 2010-12-08 00:36 |只看該作者
這可以降低學習門檻,增加代碼可讀性,難道不是嗎?
   我知道有不少人對使用拼音或漢字編程一直看 ...
KBTiller 發(fā)表于 2010-12-07 13:32


很多情況下,是習慣問題。當面對這if/while/include等等一堆英文單詞,再來寫拼音變量,大腦有時會短路。碰上拼音縮寫--只寫聲母,更是恐怖。作為入門書籍,授人語言同時,同時教導讀者寫一個規(guī)范的C程序,是更上一層樓。

論壇徽章:
2
技術圖書徽章
日期:2013-09-04 15:21:51酉雞
日期:2013-11-01 21:20:20
283 [報告]
發(fā)表于 2010-12-08 00:58 |只看該作者
回復  幻の上帝
幻の上帝的這個帖子我覺得顯然是兒童不宜的
初學者看到這個帖子恐怕更學不懂指針了

我 ...
KBTiller 發(fā)表于 2010-12-06 23:15


地址也好、內(nèi)存單元編號也好,只要學習了計算機組成原理之類的基礎課程,是不難理解的。如果沒有學過,理解起來很困難。很多人眼里C就是個“高級匯編”,所以很多人用稀奇古怪的語句榨干CPU個每個指令周期,說成地址無可厚非。
我給入門的人講C指針,就是告訴他們指針就是一類數(shù)據(jù)的索引,不用考慮這類數(shù)據(jù)的內(nèi)部組成,指針就是一張卡片,上面寫著這類數(shù)據(jù)的地址(如果學過基礎課,就可以理解為內(nèi)存地址,如果沒學過,就可以理解成日常生活中的門牌號地址)。用索引的方式,也更容易理解指針的指針,就是二級索引,再進一步就是三級索引。
只要讀者讀后,能理解指針了,能夠寫出不犯規(guī)的程序,就是好書。

論壇徽章:
0
284 [報告]
發(fā)表于 2010-12-08 07:14 |只看該作者
本帖最后由 KBTiller 于 2010-12-08 07:18 編輯

回復 283# mirnshi
很多情況下,是習慣問題。當面對這if/while/include等等一堆英文單詞,再來寫拼音變量,大腦有時會短路。碰上拼音縮寫--只寫聲母,更是恐怖。作為入門書籍,授人語言同時,同時教導讀者寫一個規(guī)范的C程序,是更上一層樓。

首先,非常感謝mirnshi網(wǎng)友發(fā)表對本書的批評意見。
我有些拿不準的是標識符的命名問題究竟是宗教問題還是哲學問題
實際上,mirnshi網(wǎng)友所說的“作為入門書籍,授人語言同時,同時教導讀者寫一個規(guī)范的C程序”,我完全贊同。這大概就是傳說中的“英雄所見略同”吧。
還有一句話叫“君子和而不同”,我與mirnshi網(wǎng)友之間看法的區(qū)別在于規(guī)范是否要求一定用英文單詞命名。
鑒于前面snowboy9859網(wǎng)友也有與mirnshi網(wǎng)友類似的看法,我愿意在這里全面地說一下我最初的考慮,歡迎大家繼續(xù)評議

1. 標識符
    由程序編寫者所取的名字都叫做“標識1符”(Identifier)。
    C語言的語法對標識符提出的語法要求是:由字母、下劃線(_)、數(shù)字組成,不能以數(shù)字開頭2。
    從代碼質(zhì)量、程序可讀性及編程修養(yǎng)的角度對標識符提出的要求是:“知意簡明”,“知意”毫無疑問更重要些。當然,這不是C語言強制性的要求。許多不注意編程修養(yǎng)的人活的也很好。正如很多人不注意個人修養(yǎng)一樣,法律是管不到他的。這是一個境界的問題。
    一般來說,由低到高,編寫代碼的境界依次是:機器能懂,自己能懂,別人能懂。
    所以,自己懂得自己命名的標識符的含義并不是一個很高的要求。不要動不動就是a、b、c或a1、a2、a3那樣的亂取名,這如同給自己的子女取名小一、小二、小三一樣粗俗。
    在程序中使用英文單詞取名并不應當受到指責,假如你的英文足夠好的話。但如果你的英文尚不敢亮給你的英文老師看的話,建議你還是使用漢語拼音,畢竟你編程的水平和你的英語水平毫無關系。筆者曾經(jīng)在一本書見過一個代碼,一本正經(jīng)地把“體重”和“身長”分別取名為“weight”和“feet”,也見識過某本書上一段關于素數(shù)的代碼中居然出現(xiàn)了leap(閏年)這個標識符的例子,結結實實且前所未有地把編程提高到了幽默的境界。
    標識符的長度是受限制的,C99要求編譯器至少要容許63個有效字符,C89是31個。各個編譯器也可能有自己的限制,請留心一下編譯器的使用說明。
    一般情況下,重名是不容許的,這會帶來混亂。在一定條件下重名是容許的。但是容許并不意味著鼓勵。筆者見過一些考試題目,考的就是重名的問題,然而那種寫法本身就是一種惡劣的編程方式,因此筆者對于這種考題的目的也是一直非常不解。
    在這里忠告諸位讀者,盡量不要重名,除非是在程序的不同的區(qū)域內(nèi)。這就如同在兩個不同班級上有同名的同學一樣,通常不會帶來什么麻煩。如果在同一個班級發(fā)生重名,通常“后果很嚴重”。
    優(yōu)秀的軟件企業(yè)一般有自己的命名規(guī)范,如果你在企業(yè)工作,你應該遵守你本企業(yè)的規(guī)范。本書采用的風格是:見名知意,即采用了漢語拼音。然而見名知意與簡潔通常是矛盾的,有時必須在兩者之間進行權衡與折中,所以例外的情況是特別常用的如循環(huán)變量用i或j,臨時變量用tmp這樣簡單的名字而不是漢語拼音。本書無意把這種風格強加于任何人,只希望能達到使代碼更具有可讀性同時能使讀者建立起命名規(guī)范的意識的目的。
________________________________________________________________________
1.讀音為“標志”。
2.這是一個過時的陳述。C99容許標識符可以由更廣泛的文字(ISO/IEC 98991999,Annex D)組成。鑒于編譯器的限制,本書的標識符依然依照原來的方法構造。

《狂人C》第29頁~第30頁

論壇徽章:
0
285 [報告]
發(fā)表于 2010-12-08 13:18 |只看該作者
地址也好、內(nèi)存單元編號也好,只要學習了計算機組成原理之類的基礎課程,是不難理解的。如果沒有學過, ...
mirnshi 發(fā)表于 2010-12-08 00:58



    您的方法非常好,很簡單。但我覺得有一個問題,就是難以為繼。比如,該章后續(xù)章節(jié)中的
   
  1. int (*(*(*func)(int *))[5])(int *);
復制代碼

    用您的方法恐怕就不那么好解釋了

論壇徽章:
0
286 [報告]
發(fā)表于 2010-12-08 13:29 |只看該作者
本帖最后由 donotblock 于 2010-12-08 14:05 編輯
這可以降低學習門檻,增加代碼可讀性,難道不是嗎?
   我知道有不少人對使用拼音或漢字編程一直看 ...
KBTiller 發(fā)表于 2010-12-07 13:32



    額,拼音的問題是歧義太多,漢語同音詞太嚴重,就算都是中國人也受不了。反而極大的降低了代碼的可讀性。  比如MSX,如果你不加注釋,誰知道意思是秒上限? 如果是英文,意思就非常明確

    看了你的試讀章節(jié):
  1. #define MSX 60 //秒數(shù)的上限
  2. #define FSX 60 //分數(shù)的上限
  3. #define SSX 24 //時數(shù)的上限
  4. int main ( void )
  5. {
  6.   int s = 21 , f = 36 , m = 23 ;      //時、分、秒
  7.   int jgs = 3, jgf = 28 , jgm = 47 ; //經(jīng)過的時、分、秒數(shù)量
  8.   printf ( "%d點%d分%d秒后再過" , s , f , m ) ;  
  9.   printf ( "%d小時%d分%d秒是" , jgs , jgf , jgm ) ;
復制代碼
你真的覺得連局部變量都得依靠詳細的注釋才能看懂的代碼是好代碼?  jgs,jgf,jgm...我只能說太恐怖了

還有這個:
  1. /*jg()函數(shù)功能:
  2.   根據(jù)初始時間和時間的增量
  3.   求得最終的時間
  4. */
  5. struct shijian jg( struct shijian sj , struct shijian zl )
  6. {
  7.   struct shijian zz;
  8.   zz.shi  =  sj.shi + zl.shi ;
  9.   zz.fen  =  sj.fen + zl.fen ;
  10.   zz.miao =  sj.miao + zl.miao ;
  11.   zz.fen  += zz.miao / MSX ;
  12.   zz.miao %= MSX ;
  13.   zz.shi  += zz.fen / FSX ;
  14.   zz.fen  %= FSX ;
  15.   zz.shi  %= SSX ;
  16.   return zz;
  17. }
復制代碼
在讀調(diào)用這個函數(shù)的那段代碼時,如果不看你的函數(shù)定義和注釋,從jp這個名字能猜出來它的功能么? 每個函數(shù)調(diào)用都要花費額外的時間才知道在做什么,那要理解一個真正的工程需要花費的額外精力就很可觀了...

敢于打破常規(guī)是好的,但大部分常規(guī)因為經(jīng)過了時間檢驗而有它的道理。 套用魯迅先生的話, “從來如此,便不對了么?”

論壇徽章:
2
技術圖書徽章
日期:2013-09-04 15:21:51酉雞
日期:2013-11-01 21:20:20
287 [報告]
發(fā)表于 2010-12-08 14:42 |只看該作者
int (*(*(*func)(int *))[5])(int *);


對于這種寫法,恐怕存在試卷上的意義要遠遠大于實際編程中。有些回字有多少種寫法的味道。函數(shù)指針理解為索引也可以,一堆代碼的索引,而且這些代碼的大小是未知的。相同參數(shù)、相同返回值的函數(shù)指針可以組成一個指針數(shù)組,相當于2級索引。

對于函數(shù)指針的應用,我的理解是為了簡化調(diào)用。舉個簡單的例子
  1. struct stub
  2. {
  3.     char *name;
  4.     int (*f)(char *);
  5. };
復制代碼
這種結構經(jīng)常用于根據(jù)一個字符串來執(zhí)行某個處理/命令,使用這種結構可以極大簡化編程。

論壇徽章:
0
288 [報告]
發(fā)表于 2010-12-08 15:20 |只看該作者
變量名本身也占用內(nèi)存這個 不對,我跑題了
zengit 發(fā)表于 2010-12-07 20:29


這樣我又有點模糊了,能否詳細解釋一下運行時程序的內(nèi)存結構?

論壇徽章:
0
289 [報告]
發(fā)表于 2010-12-08 16:46 |只看該作者
地址也好、內(nèi)存單元編號也好,只要學習了計算機組成原理之類的基礎課程,是不難理解的。如果沒有學過, ...
mirnshi 發(fā)表于 2010-12-08 00:58


偏偏C里面的address constant和其它課程里面講的address有很大的不同。
先有了address的概念,再學C,一不小心就混了。

論壇徽章:
0
290 [報告]
發(fā)表于 2010-12-08 16:53 |只看該作者
回復  mirnshi

首先,非常感謝mirnshi網(wǎng)友發(fā)表對本書的批評意見。
我有些拿不準的是標識符的命名問題究 ...
KBTiller 發(fā)表于 2010-12-08 07:14



    2.這是一個過時的陳述。C99容許標識符可以由更廣泛的文字(ISO/IEC 9899:1999,Annex D)組成。鑒于編譯器的限制,本書的標識符依然依照原來的方法構造。

引用錯了吧。
看起來是指C99的Annex J:
Annex J
(informative)
Portability issues
J.5 Common extensions
1 The following extensions are widely used in many systems, but are not portable to all
implementations. The inclusion of any extension that may cause a strictly conforming
program to become invalid renders an implementation nonconforming. Examples of such
extensions are new keywords, extra library functions declared in standard headers, or
predefined macros with names that do not begin with an underscore.
J.5.2 Specialized identifiers
1 Characters other than the underscore _, letters, and digits, that are not part of the basic
source character set (such as the dollar sign $, or characters in national character sets)
may appear in an identifier (6.4.2).
Annex D在ISO C++倒是講Portability issues的。
另外,這里是informative而不是normative,并且標準指出了“are not portable to all
implementations”。所以即使編譯器不支持這種擴展,仍然可以符合標準。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP