一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

C語言編程學(xué)習(xí)基地 ? 2018-04-14 11:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群




今天整理了一些#define的用法,與大家共享!

1.簡(jiǎn)單的define定義

#define MAXTIME 1000

一個(gè)簡(jiǎn)單的MAXTIME就定義好了,它代表1000,如果在程序里面寫

if(i

編譯器在處理這個(gè)代碼之前會(huì)對(duì)MAXTIME進(jìn)行處理替換為1000。

這樣的定義看起來類似于普通的常量定義CONST,但也有著不同,因?yàn)閐efine的定義更像是簡(jiǎn)單的文本替換,而不是作為一個(gè)量來使用,這個(gè)問題在下面反映的尤為突出。

2.define的“函數(shù)定義”

define可以像函數(shù)那樣接受一些參數(shù),如下

#define max(x,y) (x)>(y)?(x):(y);

這個(gè)定義就將返回兩個(gè)數(shù)中較大的那個(gè),看到了嗎?因?yàn)檫@個(gè)“函數(shù)”沒有類型檢查,就好像一個(gè)函數(shù)模板似的,當(dāng)然,它絕對(duì)沒有模板那么安全就是了??梢宰鳛橐粋€(gè)簡(jiǎn)單的模板來使用而已。

但是這樣做的話存在隱患,例子如下:

#define Add(a,b) a+b;

在一般使用的時(shí)候是沒有問題的,但是如果遇到如:c * Add(a,b) * d的時(shí)候就會(huì)出現(xiàn)問題,代數(shù)式的本意是a+b然后去和c,d相乘,但是因?yàn)槭褂昧薲efine(它只是一個(gè)簡(jiǎn)單的替換),所以式子實(shí)際上變成了

c*a + b*d

另外舉一個(gè)例子:

#define pin (int*);

pin a,b;

本意是a和b都是int型指針,但是實(shí)際上變成int* a,b;

a是int型指針,而b是int型變量。

這是應(yīng)該使用typedef來代替define,這樣a和b就都是int型指針了。

所以我們?cè)诙x的時(shí)候,養(yǎng)成一個(gè)良好的習(xí)慣,建議所有的層次都要加括號(hào)。

3.宏的單行定義

#define A(x) T_##x

#define B(x) #@x

#define C(x) #x

我們假設(shè):x=1,則有:

A(1)------〉T_1

B(1)------〉'1'

C(1)------〉"1"

(這里參考了 hustli的文章)

3.define的多行定義

define可以替代多行的代碼,例如MFC中的宏定義(非常的經(jīng)典,雖然讓人看了惡心)

#define MACRO(arg1, arg2) do { /

/* declarations */ /

stmt1; /

stmt2; /

/* ... */ /

} while(0) /* (no trailing ; ) */

關(guān)鍵是要在每一個(gè)換行的時(shí)候加上一個(gè)"/"

摘抄自https://www.blog.edu.cn/user1/16293/archives/2005/115370.shtml 修補(bǔ)了幾個(gè)bug

4.在大規(guī)模的開發(fā)過程中,特別是跨平臺(tái)和系統(tǒng)的軟件里,define最重要的功能是條件編譯。

就是:

#ifdef WINDOWS

......

......

#endif

#ifdef LINUX

......

......

#endif

可以在編譯的時(shí)候通過#define設(shè)置編譯環(huán)境

5.如何定義宏、取消宏

//定義宏

#define [MacroName] [MacroValue]

//取消宏

#undef [MacroName]

//普通宏

#define PI (3.1415926)

帶參數(shù)的宏

#define max(a,b) ((a)>(b)? (a),(b))

關(guān)鍵是十分容易產(chǎn)生錯(cuò)誤,包括機(jī)器和人理解上的差異等等。

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文件包含;

重復(fù)包含(重復(fù)定義)

由于頭文件包含可以嵌套,那么C文件就有可能包含多次同一個(gè)頭文件,就可能出現(xiàn)重復(fù)定義的問題的。

通過條件編譯開關(guān)來避免重復(fù)包含(重復(fù)定義)

例如

#ifndef __headerfileXXX__

#define __headerfileXXX__

//文件內(nèi)容

#endif

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7632

    瀏覽量

    141678
  • define
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    3934

原文標(biāo)題:C語言中#define的用法介紹

文章出處:【微信號(hào):cyuyanxuexi,微信公眾號(hào):C語言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C語言typedef與#define用法和區(qū)別

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

    C語言#define和typedef的區(qū)別

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

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

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

    C語言中位運(yùn)算符的高級(jí)用法(1)

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

    C語言中位運(yùn)算符的高級(jí)用法(2)

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

    C語言中位運(yùn)算符的高級(jí)用法(3)

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

    C語言中位運(yùn)算符的高級(jí)用法(5)

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

    單片機(jī)的C語言中位操作用法

    單片機(jī)的C語言中位操作用法
    發(fā)表于 08-17 15:04

    C語言中atoi()函數(shù)的用法 相關(guān)資料分享

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

    C語言中指針的介紹非常詳細(xì)

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

    關(guān)于C語言一些特殊功能介紹

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

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

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

    C語言中的typedef的用法

    在以前的學(xué)習(xí)中對(duì)于C語言中typedef和define的認(rèn)識(shí)是,#define是宏,作用是簡(jiǎn)單的替換,而typedef也是替換,只不過比define
    發(fā)表于 01-13 13:36 ?0次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>的typedef的<b class='flag-5'>用法</b>

    INCA的一些用法

    INCA的一些用法
    的頭像 發(fā)表于 11-10 15:32 ?1.1w次閱讀

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

    C語言種低級(jí)的、靜態(tài)的、結(jié)構(gòu)化的編程語言,它沒有提供像C++或Java等高級(jí)語言中的異常處理
    的頭像 發(fā)表于 02-28 14:25 ?968次閱讀