那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言中#define的一些用法介紹概述

C語言編程學習基地 ? 2018-04-14 11:29 ? 次閱讀




今天整理了一些#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 ; ) */

關鍵是要在每一個換行的時候加上一個"/"

摘抄自https://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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137703
  • define
    +關注

    關注

    0

    文章

    16

    瀏覽量

    3767

原文標題:C語言中#define的用法介紹

文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學習基地】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C語言typedef與#define用法和區別

    C語言編程中,typedef 和 #define是最常用語句,可能很多工作過幾年的工程師都沒有去深究過它們的一些用法和區別。
    發表于 10-12 10:39 ?708次閱讀

    C語言#define和typedef的區別

    C語言編程中,typedef 和 #define是最常用語句,可能很多工作過幾年的工程師都沒有去深究過它們的一些用法和區別。
    發表于 11-03 10:29 ?696次閱讀

    C語言中枚舉的基本概念和常見用法

    C語言中,枚舉是種方便組織和表示組相關常量的工具。枚舉類型有助于提高代碼的可讀性和可維護性。本文將介紹
    發表于 08-17 15:32 ?1558次閱讀

    C語言中位運算符的高級用法(1)

    在上篇文章中,我們介紹了&運算符的基礎用法,本篇文章,我們將介紹& 運算符的一些高級用法
    發表于 08-22 10:44 ?347次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>位運算符的高級<b class='flag-5'>用法</b>(1)

    C語言中位運算符的高級用法(2)

    在上篇文章中,我們介紹了&運算符的高級用法,本篇文章,我們將介紹| 運算符的一些高級用法
    發表于 08-22 10:45 ?361次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>位運算符的高級<b class='flag-5'>用法</b>(2)

    C語言中位運算符的高級用法(3)

    在上篇文章中,我們介紹了|運算符的高級用法,本篇文章,我們將介紹^ 運算符的一些高級用法
    發表于 08-22 10:47 ?285次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>位運算符的高級<b class='flag-5'>用法</b>(3)

    C語言中位運算符的高級用法(5)

    在上篇文章中,我們介紹了~運算符的高級用法,本篇文章,我們將介紹
    發表于 08-22 10:49 ?375次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>位運算符的高級<b class='flag-5'>用法</b>(5)

    單片機的C語言中位操作用法

    單片機的C語言中位操作用法
    發表于 08-17 15:04

    C語言中atoi()函數的用法 相關資料分享

    C語言中atoi()函數的用法
    發表于 07-01 08:12

    C語言中指針的介紹非常詳細

    C語言中指針的介紹非常詳細 C語言中指針的介紹非常詳細
    發表于 12-25 10:39 ?57次下載

    關于C語言一些特殊功能介紹

    C語言之所以那么受歡迎,除了C語言歷史悠久之外,還有它具有一些編程語言沒有的功能。那么,今年我們
    的頭像 發表于 08-18 15:31 ?2506次閱讀
    關于<b class='flag-5'>C</b><b class='flag-5'>語言</b>的<b class='flag-5'>一些</b>特殊功能<b class='flag-5'>介紹</b>

    C語言中的#和##的用法

    和conStr的參數,并且宏conStr和toString中均含有#或者##符號,所以A不能被解引用。導致不符合預期的情況出現。 3.2 解決方案 結果: 責任編輯:xj 原文標題:C語言中#和##的用法 文章出處:【微信公眾號
    的頭像 發表于 12-06 09:34 ?7.6w次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>的#和##的<b class='flag-5'>用法</b>

    C語言中的typedef的用法

    在以前的學習中對于C語言中typedef和define的認識是,#define是宏,作用是簡單的替換,而typedef也是替換,只不過比define
    發表于 01-13 13:36 ?0次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>的typedef的<b class='flag-5'>用法</b>

    INCA的一些用法

    INCA的一些用法
    的頭像 發表于 11-10 15:32 ?9333次閱讀

    介紹C語言中錯誤處理和異常處理的一些常用的方法和策略

    C語言種低級的、靜態的、結構化的編程語言,它沒有提供像C++或Java等高級語言中的異常處理
    的頭像 發表于 02-28 14:25 ?674次閱讀
    24山向吉凶详解| 法拉利百家乐官网的玩法技巧和规则| 棋牌小游戏| 百家乐筹码价格| 香港百家乐官网娱乐场开户注册| 开封市| 大发888娱乐大发体育| 澳门百家乐官网打法百家乐官网破解方法 | 百家乐官网真钱在线| 大发888 赌博网站| 百家乐赌现金| 做生意怎么看风水| 百家乐官网定位膽技巧| 尊龙代理| 大发888怎么赢钱| 百家乐投注软件有用吗| 嘉禾百家乐官网的玩法技巧和规则| 凯旋门百家乐官网现金网| 凯斯娱乐城| 威尼斯人娱乐城 线路畅通中心| 真钱百家乐公司哪个好| 百家乐官网算牌方| 八大胜百家乐官网现金网| 皇冠即时走地| 大发888怎么注册账号| 百家乐真人娱乐场开户注册 | 网络百家乐官网金海岸破解软件| 环球国际娱乐城| 大发8888| 百家乐博乐城| 百家乐庄闲的分布| 七匹狼百家乐官网的玩法技巧和规则 | 百家乐官网蓝盾假网| 六合彩130| 大发888为什么卡| 查找百家乐群| 百家乐信息| 网络百家乐免费试玩| 百家乐官网在线投注顺势法| 广饶县| 赌博游戏|