small-fat
in fact , I'm not fat..
導航
C++博客
首頁
新隨筆
聯系
聚合
管理
統計
隨筆 - 32
文章 - 0
評論 - 23
引用 - 0
常用鏈接
我的隨筆
我的評論
我參與的隨筆
留言簿
(6)
給我留言
查看公開留言
查看私人留言
隨筆分類
about C++(2)
(rss)
Data Of ACM(19)
(rss)
日記(1)
(rss)
生活(1)
(rss)
之ACM.............(24)
(rss)
之mathematics........(3)
(rss)
隨筆檔案
2007年8月 (1)
2007年4月 (9)
2006年11月 (1)
2006年10月 (4)
2006年9月 (6)
2006年8月 (10)
2006年5月 (1)
相冊
Seeing is believing
My friends
qywyh
(rss)
輕松一刻
原諒一個強奸犯的自白(巨強悍!)
(rss)
最新隨筆
1.?netbeans中的c++配置
2.?Trie數+DP
3.?#define的用法
4.?pow函數比較不穩定,可以用自定義的pown函數進行計算
5.?multimap實現一對多映射
6.?多源最短路徑+最小路徑覆蓋
7.?動態創建二維數組
8.?用鏈表構造鄰接矩陣
9.?nlogn的最大上升子序列長度算法
10.?高精度算法
搜索
積分與排名
積分 - 34403
排名 - 594
最新評論
1.?re: 高精度算法
評論內容較長,點擊標題查看
--郭如君
2.?re: 高精度算法
就是用字符串表示一個數,如從1乘到1000,每位數用一個字節表示,負數表示如
-12345,等價于-1,8,7,6,5,5,高位肯定是-1。
--郭如君
3.?re: 歐拉函數
初次接觸歐拉函數,請教一下:7^d≡1 mod 60,是如何推導d的值為43?
--1111
4.?re: 高精度算法
評論內容較長,點擊標題查看
--an
5.?re: 高精度算法
評論內容較長,點擊標題查看
--an
閱讀排行榜
1.?擴展歐幾里德算法-求解不定方程,線性同余方程(2996)
2.?高精度算法(2752)
3.?多源最短路徑+最小路徑覆蓋(2478)
4.?netbeans中的c++配置(2212)
5.?ACM深度優先搜索(一題及代碼)(1813)
評論排行榜
1.?高精度算法(5)
2.?問題:UnionFindSet(3)
3.?國家隊論文(3)
4.?中國vs足球(2)
5.?ACM深度優先搜索(一題及代碼)(2)
#define的用法
轉載:
http://folsailor.bokee.com/6156411.html
#define的用法zz
今天整理了一些#define的用法,與大家共享!
1
.簡單的define定義
#define MAXTIME
1000
一個簡單的MAXTIME就定義好了,它代表1000,如果在程序里面寫
if
(i
編譯器在處理這個代碼之前會對MAXTIME進行處理替換為1000。
這樣的定義看起來類似于普通的常量定義CONST,但也有著不同,因為define的定義更像是簡單的文本替換,而不是作為一個量來使用,這個問題在下面反映的尤為突出。
2
.define的“函數定義”
define可以像函數那樣接受一些參數,如下
#define max(x,y) (x)
>
(y)?(x):(y);
這個定義就將返回兩個數中較大的那個,看到了嗎?因為這個“函數”沒有類型檢查,就好像一個函數模板似的,當然,它絕對沒有模板那么安全就是了。可以作為一個簡單的模板來使用而已。
但是這樣做的話存在隱患,例子如下:
#define Add(a,b) a
+
b;
在一般使用的時候是沒有問題的,但是如果遇到如:c
*
Add(a,b)
*
d的時候就會出現問題,代數式的本意是a
+
b然后去和c,d相乘,但是因為使用了define(它只是一個簡單的替換),所以式子實際上變成了
c
*
a
+
b
*
d
另外舉一個例子:
#define pin (
int
*
);
pin a,b;
本意是a和b都是int型指針,但是實際上變成int
*
a,b;
a是int型指針,而b是int型變量。
這是應該使用typedef來代替define,這樣a和b就都是int型指針了。
所以我們在定義的時候,養成一個良好的習慣,建議所有的層次都要加括號。
3
.宏的單行定義
#define A(x) T_##x
#define B(x) #@x
#define C(x) #x
我們假設:x
=
1
,則有:
A(
1
)
------
〉T_1
B(
1
)
------
〉
'
1'
C(
1
)
------
〉
"
1
"
(這里參考了 hustli的文章)
3
.define的多行定義
define可以替代多行的代碼,例如MFC中的宏定義(非常的經典,雖然讓人看了惡心)
#define MACRO(arg1, arg2)
do
{
\
/*
declarations
*/
\
stmt1;
\
stmt2;
\
/*
*/
\
}
while
(
0
)
/*
(no trailing ; )
*/
關鍵是要在每一個換行的時候加上一個
"
\
"
摘抄自http:
//
www.blog.edu.cn
/
user1
/
16293
/
archives
/
2005
/
115370
.shtml 修補了幾個bug
4
.在大規模的開發過程中,特別是跨平臺和系統的軟件里,define最重要的功能是條件編譯。
就是:
#ifdef WINDOWS
#endif
#ifdef LINUX
#endif
可以在編譯的時候通過#define設置編譯環境
5
.如何定義宏、取消宏
//
定義宏
#define [MacroName] [MacroValue]
//
取消宏
#undef [MacroName]
普通宏
#define PI (
3.1415926
)
帶參數的宏
#define max(a,b) ((a)
>
(b)? (a),(b))
關鍵是十分容易產生錯誤,包括機器和人理解上的差異等等。
6
.條件編譯
#ifdef XXX…(#
else
) …#endif
例如 #ifdef DV22_AUX_INPUT
#define AUX_MODE
3
#
else
#define AUY_MODE
3
#endif
#ifndef XXX … (#
else
) … #endif
7
.頭文件(.h)可以被頭文件或C文件包含;
重復包含(重復定義)
由于頭文件包含可以嵌套,那么C文件就有可能包含多次同一個頭文件,就可能出現重復定義的問題的。
通過條件編譯開關來避免重復包含(重復定義)
例如
#ifndef __headerfileXXX__
#define __headerfileXXX__
…
文件內容
…
#endif
以上只是我從網絡上搜集了一些關于define的一些用法,可能還不全面,而且#define的使用本來也存在這爭議,如果你對#define的用法也很有興趣,可以來參加我們的討論(點擊下面的鏈接)http:
//
www.dingge.com
/
forum
/
dispbbs.asp?boardID
=
43
&
ID
=
6972
&
page
=
1
#define 的注意用法
在這里我們講講#define的一些誤用,因為上一片已經講了它的主要作用,這篇主要是一些比較常見的宏陷阱。首先輕松一下。如下的一個經典例子。
#define
private
public
#include
using namespace std;
class c
{
private
:
int
i;
};
int
main()
{
c c1;
c1.i
=
1
;
cout
<
}
#define 竟然讓private如此的脆弱,但是卻揭示了#define陷阱的根源,它僅僅是代碼替換機制而已,除此之外,它什么都不是。
讓我們步入正題,來看看下面的一個定義會產生一個什么樣的錯誤?
#define f (x) ((x)
-
1
)
如果這個是一個函數就沒有什么問題
int
f (
int
x) { return x
-
1
; }
但是這里是define的世界,f(x)只見出現了一個可怕的空格
使得使得程序中如果出現了
f(
10
)
這個代碼,最終就變成了
(
10
) (
10
-
1
)(
10
)這樣一個奇怪的東西,當然這個代碼倒是無法通過編譯,還是可以檢查出來的。算是讓我們逃過了一次,下次就沒有那么幸運了,讓我們繼續。
#define
abs
(x) x
>
0
? x:
-
x (引用自C語言陷阱與缺陷)
這個代碼有什么問題?也許大家也注意到了,我一直在用無數的()來寫#define,不是因為我很喜歡()這個東西,而是當我在進行如下的調用的時候。
z
=
abs
(a
-
b)
//
嗚呼,這將產生什么東西呢?
答案是:
a
-
b
>
0
? a
-
b :
-
a
-
b
這個顯然不是我們要的結果,因為當a
-
b
<
0的時候將返回一個
-
a
-
b,要解決這個問題,我們就要使用()來解決。
#define
abs
(x) (x)
>
0
? (x):
-
(x)
現在這個代碼就可以正常的工作了。只要我們緊記#define是代碼替換的機制,不要對它有任何的奢求,就會避免上面的問題。另外,因為宏不是一個類型,沒有數據安全檢查,在調試的時候也會產生障礙,所以,C
++
就一直提倡使用const和inline來替換#define,也許,#define真的會在歷史的舞臺上消失,但define在C語言時代留下的功績卻不應該忘記。
來自 http:
//
community.csdn.net
/
Expert
/
topic
/
3195
/
3195102
.xml?temp
=
.
3936731
posted on 2007-04-18 23:53
small-fat
閱讀(1335)
評論(1)
編輯
收藏
引用
所屬分類:
about C++
Comments
#
re: #define的用法
Achigo
Nice
Posted @ 2007-06-27 15:45
回復
更多評論
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
相關文章:
netbeans中的c++配置
#define的用法
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Powered by:
C++博客
Copyright © small-fat
日本加勒比久久精品
|
69久久精品无码一区二区
|
精品国产乱码久久久久久浪潮
|
精品久久久无码人妻中文字幕豆芽
|
久久精品视频网
|
欧洲国产伦久久久久久久
|
亚洲色欲久久久综合网
|
久久精品亚洲日本波多野结衣
|
亚洲国产成人久久精品动漫
|
久久亚洲精品无码播放
|
久久精品亚洲一区二区三区浴池
|
亚洲国产精品久久久久婷婷老年
|
香蕉久久久久久狠狠色
|
国产精品久久久久9999
|
久久久久久免费视频
|
2020最新久久久视精品爱
|
欧美熟妇另类久久久久久不卡
|
久久精品国产精品亚洲毛片
|
久久精品亚洲福利
|
国产精品天天影视久久综合网
|
婷婷国产天堂久久综合五月
|
久久国产热这里只有精品
|
久久中文骚妇内射
|
久久久久久国产精品无码下载
|
久久久精品无码专区不卡
|
77777亚洲午夜久久多喷
|
久久亚洲AV成人无码软件
|
国产精品欧美久久久久天天影视
|
99久久综合国产精品二区
|
亚洲精品国产字幕久久不卡
|
久久福利资源国产精品999
|
国产高潮国产高潮久久久91
|
国内精品久久久久影院免费
|
国产精品久久久久AV福利动漫
|
久久香综合精品久久伊人
|
午夜精品久久久久9999高清
|
久久久国产精品
|
久久久无码精品亚洲日韩软件
|
香蕉久久一区二区不卡无毒影院
|
亚洲国产精品热久久
|
国产精品成人久久久久久久
|