① c語言: 定義一個宏,比較a、b的大小,不要用大於、小於和IF運算符
代碼如下:
#include "stdio.h"
void main()
{
float a, b ,c;
printf ("請輸入三個數,會為你從大到小排列! ");
scanf("%f %f %f",&a,&b,&c);
if(a>b>c){printf("%f,%f,%f",a,b,c);}
else if(a>c&&c>b){printf("%f,%f,%f",a,c,b);}
else if(b>a&&a>c){printf("%f,%f,%f",b,a,c);}
else if(b>c&&c>a){printf("%f,%f,%f",b,c,a);}
else if(c>b&&b>a){printf("%f,%f,%f",c,b,a);}
else if(c>a&&a>b){printf("%f,%f,%f",c,a,b);}
//編譯器不識別三個連續的符號運算,必須用且(&&)和或(||)he否(!)
}
(1)c語言編譯定義宏擴展閱讀
C語言中宏定義的優點
方便程序的修改
使用簡單宏定義可用宏代替一個在程序中經常使用的常量,這樣在將該常量改變時,不用對整個程序進行修改,只修改宏定義的字元串即可,而且當常量比較長時, 可以用較短的有意義的標識符來寫程序,這樣更方便一些。
相對於==全局變數==兩者的區別如下:
1、宏定義在編譯期間即會使用並替換,而全局變數要到運行時才可以。
2、宏定義的只是一段字元,在編譯的時候被替換到引用的位置。在運行中是沒有宏定義的概念的。而變數在運行時要為其分配內存。
3、宏定義不可以被賦值,即其值一旦定義不可修改,而變數在運行過程中可以被修改。
4、宏定義只有在定義所在文件,或引用所在文件的其它文件中使用。 而全局變數可以在工程所有文件中使用,只要再使用前加一個聲明就可以了。換句話說,宏定義不需要extern。
② 在C語言中 宏定義是什麼
在C語言源程序中,允許用一個標識符來表示一個字元串,稱為宏,宏定義是由源程序中的宏定義命令完成的,宏替換是由預處理程序自動完成的。宏定義是C提供的三種預處理功能的其中一種,這三種預處理包括:宏定義、文件包含、條件編譯。
(2)c語言編譯定義宏擴展閱讀:
宏(Macro),是一種批量處理的稱謂。計算機科學里的宏是一種抽象,它根據一系列預定義的規則替換一定的文本模式。
計算機語言如C語言或匯編語言有簡單的宏系統,由編譯器或匯編器的預處理器實現。C語言的宏預處理器的工作只是簡單的文本搜索和替換,使用附加的文本處理語言如M4,C程序員可以獲得更精巧的宏。
③ c語言中的宏定義是什麼意思可不可以詳細的解釋一下~
宏定義又稱為宏代換、宏替換,簡稱「宏」。
格式:
#define
標識符
字元串
其中的標識符就是所謂的符號常量,也稱為「宏名」。
預處理(預編譯)工作也叫做宏展開:將宏名替換為字元串。
掌握"宏"概念的關鍵是「換」。一切以換為前提、做任何事情之前先要換,准確理解之前就要「換」。
即在對相關命令或語句的含義和功能作具體分析之前就要換:
例:
#define
pi
3.1415926
把程序中出現的pi全部換成3.1415926
④ 宏定義c語言是什麼意思
在C語言源程序中,允許用一個標識符來表示一個字元串,稱為宏,宏定義是由源程序中的宏定義命令完成的,宏替換是由預處理程序自動完成的。宏定義是C提供的三種預處理功能的其中一種,這三種預處理包括:宏定義、文件包含、條件編譯。
C語言中,預處理過程讀入源代碼,檢查包含預處理指令的語句和宏定義,並對源代碼進行相應的轉換,預處理過程還會刪除程序中的注釋和多餘的空白符號。
預處理指令是以#開頭的代碼行,#必須是該行除了空白字元外的第一個字元。#後是指令關鍵字,在#和指令關鍵字之間允許存在若干空白字元。
宏的用途
在於自動化頻繁使用的序列或者是獲得一種更強大的抽象能力。
計算機語言如C語言或匯編語言有簡單的宏系統,由編譯器或匯編器的預處理器實現。C語言的宏預處理器的工作只是簡單的文本搜索和替換,使用附加的文本處理語言如M4,C程序員可以獲得更精巧的宏。
Lisp類語言如Common Lisp和Scheme有更精巧的宏系統:宏的行為如同是函數對自身程序文本的變形,並且可以應用全部語言來表達這種變形。一個C宏可以定義一段語法的替換,然而一個Lisp的宏卻可以控制一節代碼的計算。
以上內容參考:網路-宏定義
⑤ 請問C語言中宏定義怎麼用
宏定義就好像是WORD中的「全部替換」一樣,只不過這個替換是在將源程序在系統「編譯」時執行的。
舉例說:
#define sub(a,b) ((a)-(b))
源程序中若有
x=sub(200-1,100+10);
會被編譯為:
x=((200-1)-(100+10));
即x被賦值為89
如果#define sub(a,b) a-b的話
x=sub(200-1,100+10);
就變成x=200-1-100+10;
x會被賦值為109
⑥ c語言宏定義
宏定義又稱為宏替換,C語言中的宏定義只是簡單的字元串替換而已。
比如
define
N
1000
在程序中遇到N就自動把N替換成1000,N不是一個變數,不能賦值。
如果你寫N=1;
相當於寫1000=1;
這編譯是通不過的,所以你使N的值改變是做不到的。
N只是一個要被替換的記號而已,連變數也不是。
⑦ c語言的宏定義有哪些技巧
(一)宏定義中的##
連接符與#
符
##
連接符號由兩個井號組成,其功能是在帶參數的宏定義中將兩個子串(token)聯接起來,從而形成一個新的子串。但它不可以是第一個或者最後一個子串。所謂的子串(token)就是指編譯器能夠識別的最小語法單元。具體的定義在編譯原理里有詳盡的解釋,但不知道也無所謂。同時值得注意的是#符是把傳遞過來的參數當成字元串進行替代。下面來看看它們是怎樣工作的。這是msdn上的一個例子。
假設程序中已經定義了這樣一個帶參數的宏:
#define
paster(
n
)
printf(
"token"
#n
"
=
%d",
token##n
)
同時又定義了一個整形變數:
int
token9
=
9;
現在在主程序中以下面的方式調用這個宏:
paster(
9
);
那麼在編譯時,上面的這句話被擴展為:
printf(
"token"
"9"
"
=
%d",
token9
);
注意到在這個例子中,paster(9);中的這個」9」被原封不動的當成了一個字元串,與」token」連接在了一起,從而成為了token9。而#n也被」9」所替代。
可想而知,上面程序運行的結果就是在屏幕上列印出token9=9
(二)"\"與一個較長佔多行的宏
宏定義中允許包含兩行以上命令的情形,此時必須在最右邊加上"\"且該行"\"後不能再有任何字元,連注釋部分都不能有,下面的每行最後的一定要是"\","\"後面加一個空格都會報錯,更不能跟注釋。
#define
exchange(a,b)
{\
int
t;\
t=a;\
a=b;\
b=t;\
}
⑧ C語言中的宏定義如何使用
宏定義又稱為宏代換、宏替換,簡稱"宏"。
格式:
#define 標識符 字元串
其中的標識符就是所謂的符號常量,也稱為"宏名"。
預處理(預編譯)工作也叫做宏展開:將宏名替換為字元串。
掌握"宏"概念的關鍵是"換"。一切以換為前提、做任何事情之前先要換,准確理解之前就要"換"。
即在對相關命令或語句的含義和功能作具體分析之前就要換:
例:
#define Pi 3.1415926
把程序中出現的Pi全部換成3.1415926
⑨ C語言宏定義
宏定義又稱為宏替換,c語言中的宏定義只是簡單的字元串替換而已。
比如
define
n
1000
在程序中遇到n就自動把n替換成1000,n不是一個變數,不能賦值。
如果你寫n=1;
相當於寫1000=1;
這編譯是通不過的,所以你使n的值改變是做不到的。
n只是一個要被替換的記號而已,連變數也不是。