『壹』 【c語言】變數/常量/宏定義
變數和常量是程序處理的兩種基本數據對象
變數的意義就是確定目標並提供存放的空間。
1.變數名只能是英文字母(A-Z,a-z)和數字(0-9)或者下劃線 _ 組成。
2.第一個字母必須是字母或者下劃線開頭。
3.變數名區分大小寫。
4.不能使用關鍵字來命名。
-關鍵字列表
1.char
-字元型,佔用一個位元組。
2.int
-整型,通常反映了所用機器語言中整數的最自然長度。
3.float
-單精度浮點型。
4.double
-雙精度浮點型。
數據類型 變數名
-int a
-char b
-float c
-double d
1.整型常量:520、1314、123
2.實型常量:3.14、5.12、8.97
3.字元常量:
-普通字元:'L','O','v','e'
-轉義字元:'\n','\t','\b'
4.字元串常量:"demo"
字元:'A','b'
字元串:'Hello world' 編譯器在編譯的時候會給他加上一個轉義字元 '\0' 空字元表示字元串的結束,故這個字元串有12個字元。
5.符號常量:使用前必須先定義
-定義符號常量 (宏定義)
格式:#define 標識符 常量
例如:
標識符(identifier)【有意思的是標識符念作biao fu】
1.標識符只能是英文字母(A-Z,a-z)和數字(0-9)或者下劃線(_)組成。
2.必須以字母或下劃線開頭。
3.標識符區分大小寫。
4.不能使用關鍵字來命名標識符。
『貳』 C語言怎麼用宏定義方法求絕對值
一、答案
#define ABS(x) ( (x)>0?(x):-(x) )
使用上述命令就可以使用宏定義絕對值。
二、關於宏定義語法說明
1、定義宏的語法
#define 標識符 常量 //注意, 最後沒有分號
2、語法說明
#define 的功能是將標識符定義為其後的常量。一經定義,程序中就可以直接用標識符來表示這個常量。宏定義看似和變數定義一樣,但是完全不是一個概念。
要區分開!變數名表示的是一個變數,但宏名表示的是一個常量。可以給變數賦值,但絕不能給常量賦值。
宏所表示的常量可以是數字、字元、字元串、表達式。其中最常用的是數字。
三、關於ABS函數定義說明
1、語法定義
int abs(int x)
其中x表示要求絕對值的數。
2、語法解釋
求整數的絕對值。需要引用頭文件math.h 或者 stdlib.h
3、特別注意
x必須是正整數或者正負數。不可以是浮點數類型。
(2)c語言宏定義調用變數擴展閱讀
一、C語言宏的定義
採用命令 #define 來定義宏。該命令允許把一個名稱指定成任何所需的文本。
例如一個常量值或者一條語句。在定義了宏之後,無論宏名稱出現在源代碼的何處,預處理器都會把它用定義時指定的文本替換掉。
二、沒有參數的宏
1、語法
#define 宏名稱 替換文本
其中「替換文本」前面和後面的空格符不屬於替換文本中的內容。替代文本本身也可以為空。
2、實例
#define TITLE "*** Examples of Macros Without Parameters ***"
#define BUFFER_SIZE (4 * 512)
#define RANDOM (-1.0 + 2.0*(double)rand() / RAND_MAX)
三、帶參數的宏
1、定義
定義具有形式參數(簡稱「形參」)的宏。當預處理器展開這類宏時,它先使用調用宏時指定的實際參數(簡稱「實參」)取代替換文本中對應的形參。帶有形參的宏通常也稱為類函數宏(function-like macro)。
2、語法
#define 宏名稱( [形參列表] ) 替換文本
#define 宏名稱( [形參列表 ,] ... ) 替換文本
『叄』 c語言宏定義函數如何調用
在軟體開發過程中,經常有一些常用或者通用的功能或者代碼段,這些功能既可以寫成函數,也可以封裝成為宏定義。那麼究竟是用函數好,還是宏定義好?這就要求我們對二者進行合理的取捨。
我們來看一個例子,比較兩個數或者表達式大小,首先我們把它寫成宏定義:
#define MAX( a, b) ( (a) > (b) (a) : (b) )
其次,把它用函數來實現:
int max( int a, int b)
{
return (a > b a : b)
}
很顯然,我們不會選擇用函數來完成這個任務,原因有兩個:首先,函數調用會帶來額外的開銷,它需要開辟一片棧空間,記錄返回地址,將形參壓棧,從函數返回還要釋放堆棧。這種開銷不僅會降低代碼效率,而且代碼量也會大大增加,而使用宏定義則在代碼規模和速度方面都比函數更勝一籌;其次,函數的參數必須被聲明為一種特定的類型,所以它只能在類型合適的表達式上使用,我們如果要比較兩個浮點型的大小,就不得不再寫一個專門針對浮點型的比較函數。反之,上面的那個宏定義可以用於整形、長整形、單浮點型、雙浮點型以及其他任何可以用「>」操作符比較值大小的類型,也就是說,宏是與類型無關的。
和使用函數相比,使用宏的不利之處在於每次使用宏時,一份宏定義代碼的拷貝都會插入到程序中。除非宏非常短,否則使用宏會大幅度增加程序的長度。
還有一些任務根本無法用函數實現,但是用宏定義卻很好實現。比如參數類型沒法作為參數傳遞給函數,但是可以把參數類型傳遞給帶參的宏。
看下面的例子:
#define MALLOC(n, type) \
( (type *) malloc((n)* sizeof(type)))
利用這個宏,我們就可以為任何類型分配一段我們指定的空間大小,並返回指向這段空間的指針。我們可以觀察一下這個宏確切的工作過程:
int *ptr;
ptr = MALLOC ( 5, int );
將這宏展開以後的結果:
ptr = (int *) malloc ( (5) * sizeof(int) );
這個例子是宏定義的經典應用之一,完成了函數不能完成的功能,但是宏定義也不能濫用,通常,如果相同的代碼需要出現在程序的幾個地方,更好的方法是把它實現為一個函數。
下面總結和宏和函數的不同之處,以供大家寫代碼時使用,這段總結摘自《C和指針》一書。
example:
define的單行定義
#define maxi(a,b) (a>;b?a:b)
define的多行定義
define可以替代多行的代碼,例如MFC中的宏定義(非常的經典,雖然讓人看了惡心)
#define MACRO(arg1, arg2) do { \
\
stmt1; \
stmt2; \
\
} while(0)
關鍵是要在每一個換行的時候加上一個 "\ "
//宏定義寫出swap(x,y)交換函數
#define swap(x, y)\
x = x + y;\
y = x - y;\
x = x - y;
zigbee里多行define有如下例子
#define FillAndSendTxOptions( TRANSSEQ, ADDR, ID, LEN, TxO ) { \
afStatus_t stat; \
ZDP_TxOptions = (TxO); \
stat = fillAndSend( (TRANSSEQ), (ADDR), (ID), (LEN) ); \
ZDP_TxOptions = AF_TX_OPTIONS_NONE; \
return stat; \
}
『肆』 c語言中為什麼用宏定義一個字元常量(一個字母)可以賦值給字元變數
因為宏是一個簡單替換,所以c語言中用宏定義一個字元常量(一個字母)可以賦值給字元變數。實質是在編譯之前會把宏替換掉,然後再編譯。
例如:
#define A 5
void main()
{
int num=A;
}
在編譯之前A已經被替換成5了,所以就可以賦值給num。
『伍』 C語言宏定義
宏定義是C提供的三種預處理功能的其中一種,這三種預處理包括:宏定義、文件包含、條件編譯
宏定義又稱為宏代換、宏替換,簡稱「宏」。
格式:
#define 標識符 字元串
其中的標識符就是所謂的符號常量,也稱為「宏名」。
預處理(預編譯)工作也叫做宏展開:將宏名替換為字元串。
掌握"宏"概念的關鍵是「換」。一切以換為前提、做任何事情之前先要換,准確理解之前就要「換」。
即在對相關命令或語句的含義和功能作具體分析之前就要換:
例:
#define PI 3.1415926
把程序中出現的PI全部換成3.1415926
說明:
(1)宏名一般用大寫
(2)使用宏可提高程序的通用性和易讀性,減少不一致性,減少輸入錯誤和便於修改。例如:數組大小常用宏定義
(3)預處理是在編譯之前的處理,而編譯工作的任務之一就是語法檢查,預處理不做語法檢查。
(4)宏定義末尾不加分號;
(5)宏定義寫在函數的花括弧外邊,作用域為其後的程序,通常在文件的最開頭。
(6)可以用#undef命令終止宏定義的作用域
(7)宏定義不可以嵌套
(8)字元串" "中永遠不包含宏
(9)宏定義不分配內存,變數定義分配內存。
(10)宏定義不存在類型問題,它的參數也是無類型的。
這樣可以么?
『陸』 C語言中#define宏定義和變數定義的聯系和區別
#define宏定義的量是做常量處理的,如#define
price
30,下文只要遇到price就代表常量30,他與變數的區別之一是在書出語句中printf(「%d」,a)(a為變數),這是合法的;但如果出現printf(「%d」,price)這就是不合法的。另外宏語句在整個程序中有效,而變數只在某個函數內有效。
『柒』 C語言如何定義一個宏,可以有參數或無參數的調用
#include<stdio.h>
#definePRINTF_120printf("120 ");//無參數宏定義
#definePRINTF_INT(a)printf("%d ",a);//有參數宏定義
intmain(intargc,char*argv[])
{
PRINTF_120
PRINTF_INT(110)
return0;
}
『捌』 c語言宏定義
宏定義又稱為宏替換,C語言中的宏定義只是簡單的字元串替換而已。
比如
define
N
1000
在程序中遇到N就自動把N替換成1000,N不是一個變數,不能賦值。
如果你寫N=1;
相當於寫1000=1;
這編譯是通不過的,所以你使N的值改變是做不到的。
N只是一個要被替換的記號而已,連變數也不是。
『玖』 c語言宏定義如何用用宏定義有什麼優點
用#define 來定義,如#define Max 100
優點:在以後的程序中 要修改Max的大小 不用跑到程序中找 直接修改
#define Max 的大小即可。很方便。