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

  免費注冊 查看新帖 |

Chinaunix

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

[C] 有多少C程序員認為這是錯誤的寫法 [復制鏈接]

論壇徽章:
2
程序設計版塊每日發(fā)帖之星
日期:2015-06-17 22:20:00每日論壇發(fā)貼之星
日期:2015-06-17 22:20:00
41 [報告]
發(fā)表于 2012-05-11 23:22 |只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽

論壇徽章:
2
程序設計版塊每日發(fā)帖之星
日期:2015-06-17 22:20:00每日論壇發(fā)貼之星
日期:2015-06-17 22:20:00
42 [報告]
發(fā)表于 2012-05-11 23:24 |只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽

論壇徽章:
2
程序設計版塊每日發(fā)帖之星
日期:2015-06-17 22:20:00每日論壇發(fā)貼之星
日期:2015-06-17 22:20:00
43 [報告]
發(fā)表于 2012-05-11 23:25 |只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽

論壇徽章:
2
程序設計版塊每日發(fā)帖之星
日期:2015-06-17 22:20:00每日論壇發(fā)貼之星
日期:2015-06-17 22:20:00
44 [報告]
發(fā)表于 2012-05-11 23:31 |只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽

論壇徽章:
0
45 [報告]
發(fā)表于 2012-05-11 23:33 |只看該作者
pmerofc 發(fā)表于 2012-05-11 23:12
回復 36# 變異老鼠


這個還真是對的。

C99 7.20.3/1
... The pointer returned if the allocation
succeeds is suitably aligned so that it may be assigned to a pointer to any type of object
and then used to access such an object or an array of such objects in the space allocated
(until the space is explicitly deallocated). ...

論壇徽章:
2
青銅圣斗士
日期:2015-11-26 06:15:59數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-07-24 06:20:00
46 [報告]
發(fā)表于 2012-05-11 23:49 |只看該作者
回復 41# pmerofc

比如:

  1. /* C89 */
  2. typedef struct {
  3.       ...
  4.       char s[1];
  5. } T;

  6. size_t l = strlen(argv[0]);
  7. T* p = (T*)malloc( l + sizeof *p);
  8. strcpy(p->s, argv[0]);
  9. ...
復制代碼
當然,這技巧是飽受爭議的……

論壇徽章:
2
青銅圣斗士
日期:2015-11-26 06:15:59數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-07-24 06:20:00
47 [報告]
發(fā)表于 2012-05-12 00:10 |只看該作者
回復 42# pmerofc

原文:
在實際中并不考慮這類少見的問題。我們不認為在任何編譯器和機器上,對于小整數(shù)n, b=(b-n)+n 確實會失敗。
即使在分段式機器中,發(fā)生了編譯器存儲了某些b-n的表達式(也許是違法規(guī)則的),那么,當表達式加上n后,b就恢復正常。
本書中的這些內(nèi)存分配程序,從1988年第一版發(fā)表以后就已廣泛應用,當然也存在著同樣的問題。
但是我們從未收到過在這方面失敗的報告,哪怕是一份簡單的報告(盡管有許多讀者指出在理論上它確實可能失。
我們也曾與C語言標準團體通信,希望在將來的標準中能夠允許這個需要“b=(b-n)+n”(至少對n的某些范圍,并設n為短型數(shù)據(jù)類型)。
因為這樣做,看起來與現(xiàn)有的一些編譯器并沒有什么沖突。

《C數(shù)值算法》 B.1.2 單位偏移量

b在上下文中是指針類型。"短型數(shù)據(jù)類型"確實是譯文原文…… 英文原文我也不知道是什么……


很少有non-trivial的程序可以用純ISO C寫成。
看trivial怎么定義吧,如果嚴格到cp都算是trivial的話,那基本可以說:non-trivial程序不可能由ISO C寫成。
問題的關(guān)鍵不在于程序是否是100%純ISC C,而是 1) 超出是否值得 2) 超出部分比重多大


陳同學的問題就是: 1) 為了一點莫須有的可讀性而超出C范圍 —— 我認為不值得  2) 這不是他的什么個人項目,而是傳道授業(yè)的書,不應該這么亂來。
而數(shù)值算法為了下標問題超出C范圍我認為也不值得, C程序員寫C程序時就應該從0開始數(shù)數(shù)…… 而不是和語言對著干……
不過這書重點是算法而非C語言(第1版是Fortran,也許是固守1下標的理由之一……)。

論壇徽章:
0
48 [報告]
發(fā)表于 2012-05-12 00:12 |只看該作者
回復 39# pmerofc


   行指針也就是 在數(shù)組里那樣通俗的叫法,其實就是一維數(shù)組指針

論壇徽章:
2
青銅圣斗士
日期:2015-11-26 06:15:59數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-07-24 06:20:00
49 [報告]
發(fā)表于 2012-05-12 00:37 |只看該作者
回復 45# 變異老鼠

1下標在35樓就說了,它超出C的范圍了,而且都能設想出一種可能性。記得以前有過p[-1]的帖子,這里就不重復了。


但其他兩個(連續(xù)內(nèi)存、首成員地址)要說超出C范圍了吧,也許確實超了;但想不出會產(chǎn)生什么問題。
pmerofc 發(fā)表于 2012-05-11 23:21
回復 35# OwnWaterloo

C99和C11都特意指出了這是一種未定義行為(附錄)
究竟是出于什么深刻的原因
我也不太明白

也許只是有罪推定呢? 制定標準時覺得這沒用 —— 都給我用flexible去…… —— 但又是確實他們的失誤呢?


為什么是失誤?將malloc得到的內(nèi)存當作二維又或是一維顯然必須是對的……
那么問題就來了,就是35樓與36樓的。這問題還可以反問44樓的cfaq:為什么malloc就可以,而自動變量就不行?

比如44樓的cfaq的代碼:

  1. f2(&array[0][0], NROWS, NCOLUMNS);
復制代碼
如果改為:

  1. void* p = malloc(NROWS * NCOLUMNS* sizeof(int));
  2. f2(p, NROWS, NCOLUMNS);
復制代碼
內(nèi)存大小相同 —— sizeof(array)==NROWS * NCOLUMNS* sizeof(int) —— ,對齊都合乎要求, 就完全沒問題。
為什么一個可以,另一個就不可以?

甚至依然用自動變量,但用一個union:

  1. union {
  2.       int a1[N*M];
  3.       int a2[N][M];
  4. } u;
復制代碼
又該怎么解釋?


能想到可能的回答是 —— 就像35樓說的 —— 編譯器進行一些邊界檢查。對a[N],超出[(char*)a,(char*)a+sizeof a)就報錯。
而對b[N][M],超出[(char*)b, (char*)b+sizeof b) 的訪問報錯我覺得可以做到。
但對中間的訪問,編譯器還能夠區(qū)分出是通過二維還是一維訪問,并且真的這么干了…… 那也管太寬了……
如果這編譯器還不提供命令行選項去掉這種功能,至少這編譯器我不會去用……

論壇徽章:
2
青銅圣斗士
日期:2015-11-26 06:15:59數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-07-24 06:20:00
50 [報告]
發(fā)表于 2012-05-12 00:38 |只看該作者
回復 45# 變異老鼠

我回復錯人了……  是準備回復pmerofc的……
你倆頭像太一致了
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP