在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取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

    文章

    7627

    瀏覽量

    139633
  • define
    +關注

    關注

    0

    文章

    16

    瀏覽量

    3863

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

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

收藏 0人收藏

    評論

    相關推薦

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

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

    C語言#define和typedef的區別

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

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

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

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

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

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

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

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

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

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

    在上篇文章中,我們介紹了~運算符的高級用法,本篇文章,我們將介紹
    發表于 08-22 10:49 ?439次閱讀
    <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 ?2638次閱讀
    關于<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 ?1w次閱讀

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

    C語言種低級的、靜態的、結構化的編程語言,它沒有提供像C++或Java等高級語言中的異常處理
    的頭像 發表于 02-28 14:25 ?836次閱讀
    主站蜘蛛池模板: 色狠狠狠狠综合影视 | 成人午夜精品久久久久久久小说 | 三级在线看 | 国产嫩草影院精品免费网址 | 日本视频一区二区三区 | 天天射网 | 免费人成年短视频在线观看免费网站 | 亚洲二区视频 | 色综合久久网女同蕾丝边 | 天天爱天天干天天 | 张柏芝三级无删减在线观看 | 中文字幕在线观看一区二区三区 | 欧美人成绝费网站色www吃脚 | 狠狠干2015 | 好男人社区www在线观看 | 天天干夜夜添 | 天天做天天爱天天爽天天综合 | 丁香花的视频免费观看 | 国产美女在线精品免费观看 | 日韩精品一区二区三区毛片 | 天天干天天干天天 | 夜夜操天天干 | 色妞视频资源在线观看 | 中文字幕有码视频 | 综合激情网五月 | 伊人玖玖| sss在线play | 国产伦子一区二区三区 | 2020狠狠操 | 欧美日韩国产另类一区二区三区 | 欧美日韩亚洲一区 | 日本一区二区三区视频在线 | 澳门久久 | 亚洲啊v| 午夜三级福利 | 激情丁香六月 | 爱情社保片鲁丝片一区 | 亚洲欧洲一区二区三区在线观看 | 手机在线看片福利盒子 | 青青热久久国产久精品秒播 | 天堂网视频在线 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品