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

  免費注冊 查看新帖 |

Chinaunix

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

C語言帶常量參數(shù)宏的編譯時參數(shù)檢查,有辦法實現(xiàn)嗎?(答案已經(jīng)公開) [復制鏈接]

論壇徽章:
0
31 [報告]
發(fā)表于 2012-02-01 18:02 |只看該作者
除0法

  1. #define MACRO_P(A)                                                \
  2. {                                                                                \
  3.         1 /((A) >= 0 && (A) <= 5 ? 1 : 0);        \
  4. }
復制代碼

論壇徽章:
0
32 [報告]
發(fā)表于 2012-02-01 18:18 |只看該作者
AD8018 發(fā)表于 2012-02-01 16:11
我堅信沒有,要有也是寫多個宏的變種。

要不公布答案吧,如果我輸了,愿意免費贈送百元之內(nèi)圖書一本 ...

先拍個照,靜等下文。

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

1. 這方法不一定是D首創(chuàng)

"modern c++ design" —— 2001年出版 —— 里就有c++03的實現(xiàn)。
而D語言是在03年才加入static assert。 見: http://www.digitalmars.com/d/1.0/changelog1.html#new073

2. typedef的方法

這方法我在windows platform sdk的header中間過,忘記是哪個了……
無法追查確切使用年代,不過我感覺比MCD與D都早。
如果能想起是哪個頭文件,且在VC6 —— 98nian —— 帶的header里面找找;如果找到就能說明比上面兩者都早了。

4. __COUNTER__

如果需要的是遞增的計數(shù)器,那確實需要__COUNTER__擴展。
但如果只是需要保證翻譯單元中唯一,用C89/C99/C++03/C++11都支持的__LINE__就可以了。

3. c89/c99/c++03/c++11的編譯時整型常量約束

因為c99支持VLA,所以負數(shù)下標不頂用了。
除了位域,其實更常見的提出編譯時約束的是enum。

論壇徽章:
0
34 [報告]
發(fā)表于 2012-02-01 18:43 |只看該作者
好吧,不是D的首創(chuàng)。

論壇徽章:
0
35 [報告]
發(fā)表于 2012-02-01 18:47 |只看該作者
>3. c89/c99/c++03/c++11的編譯時整型常量約束

>因為c99支持VLA,所以負數(shù)下標不頂用了。
你確認?

論壇徽章:
0
36 [報告]
發(fā)表于 2012-02-01 18:49 |只看該作者
回復 31# AD8018


    這個可能會有運行時開銷吧,最起碼要依賴編譯器優(yōu)化。

論壇徽章:
0
37 [報告]
發(fā)表于 2012-02-01 19:01 |只看該作者
ddddddddd 發(fā)表于 2012-02-01 18:18
先拍個照,靜等下文。


沒事啊,愿賭服輸。
樓主隨便選吧,最好淘寶鏈接,俺購書方便點。

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

哦,我說得太簡略了……

應該這么說:
1. c89/c++中數(shù)組的維度是一種提出編譯時約束的方法。必須要提供一個編譯時常量,否則就是編譯錯誤。
2. 同時也要求這個常量必須>0,對是否可以為0這個細節(jié)記不清了,但<0肯定也是錯誤。 于是就可以用作static assert

但c99里支持VLA,數(shù)組維度不需要是編譯時常量。
上面的1已經(jīng)不支持了;所以2這種負數(shù)下標的技巧就不頂用了。

論壇徽章:
0
39 [報告]
發(fā)表于 2012-02-01 19:09 |只看該作者
回復 37# AD8018


    汗,我不參與公開賭博。

論壇徽章:
0
40 [報告]
發(fā)表于 2012-02-01 19:21 |只看該作者
>但c99里支持VLA,數(shù)組維度不需要是編譯時常量。
>上面的1已經(jīng)不支持了;所以2這種負數(shù)下標的技巧就不頂用了。

確實不需要是編譯時常量,但如果是常量的話,必須大于0。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(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的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP