⑴ 在C語言中如何用標准宏定義實現計算兩個參數中的最小值
你可以用這三個眼睛操作符(?:)實現,定義,#定義最小(x,y) ((x)<(y)?(x) (y)),測試代碼如下:
//程序功能實現,計算兩個數字的最小值。
包括< stdio, h >。
定義最小(x, y) ((x) (y)?(x):(y))
Int main(Int argc, char *argv[])
{Int x = 10, y = 15;
Printf(" MIN(% d % d)= % d n」,x,y,MIN(x,y));
返回0;}
需要注意的是,宏定義是原始的替換,您需要確保替換的准確性,例如,
定義最小(x, y) (x < y?X:y),在這個定義之後,宏表達式可能看起來是一個問題,而不是期望的結果,例如下面的例子,它可以區分出不同,而編譯器可能有不同的結果。
包括< stdio, h >。
定義MIN1 (x, y) (x < y?X,y)
定義MIN2 (x, y) ((x) (y)?(x):(y))
Int main(Int argc, char *argv[])
{Int x = 10, y = 15;
Printf(" MIN1(% d % d)= % d n ",x,y,MIN1(+ = 2 x,y));/ /輸出MIN1 = 24 (24 (9)
X = 10;
Printf(" MIN2(% d % d)= % d n ",x,y,MIN2(+ = 2 x,y));/ /輸出MIN2 = 14 (14,15)
返回0;
⑵ lisp的宏怎麼在編譯時展開
Scheme 的 syntax-rules 確實會展開成 (let ((a 12)) (* a x)):
(define-syntax test
(syntax-rules ()
[(_ x) (let ([a 12]) (* a x))]))
clisp、clojure 和 scheme 的 syntax-case 則允許更顯式地標注哪些部分給展開成結果,也就是說,下面的 clisp 宏定義:
(defmacro test (x) (let ((a 12)) `(* ,a ,x)))
展開的結果是 (* 12 x) 。
⑶ C++ 中define(宏定義) 各種用法(含特殊),小舉個例子,謝謝!
1、define是宏定義,程序在預處理階段將用define定義的內容進行了替換。因此在程序運行時,常量表中並沒有用define定義的常量,系統不為它分配內存。而const定義的常量,在程序運行時,存在常量表中,且系統為它分配內存。
2、define定義的常量,預處理時只是直接進行了替換,因此在編譯時不能進行數據類型檢驗。而const定義的常量,在編譯時進行嚴格的類型檢驗,可以避免出錯。
3、define定義表達式時要注意「邊緣效應」。
例如:
#defineN1+2;
floata=N/2.0;
按照常規做法,可能會認為結果是3/2=1.5;
但是實際上,結果應該為1+2/2.0=2.0;
若想要實現3/2,則#defineN(1+2);
即為避免邊緣效應,一定要加括弧。
(3)怎麼讓宏定義在編譯時計算擴展閱讀
C++宏定義
#define命令是C++語言中的一個宏定義命令,它用來將一個標識符定義為一個字元串,該標識符被稱為宏名,被定義的字元串稱為替換文本。
1、簡單的宏定義:
#define <宏名> <字元串>
例: #define PI 3.1415926
2、帶參數的宏定義
#define <宏名> (<參數表>) <宏體>
例: #define A(x) x
⑷ C語言宏定義計算問題
答案是21
因為你定義的f(x) x*x ,而你下面的i=f(4+4)/(2+2)中是講4+4作為x的值,所以展開的時候是這樣的, i=4+4*4+4 /(2+2),所以結果是 i=4+16+1 ,當然是21了
⑸ C語言宏定義 用條件編譯
條件編譯以及所有前面帶「#」的語句,是在編譯階段執行的語句,不會生成運行時的代碼。而你的y是在運行時才進行賦值的,所以是無法用條件編譯來實現的。
直接寫成條件語句就行:
{
if R
printf("%d是閏年\n",y);
else
printf("%d不是閏年\n",y);
}
⑹ C語言宏定義
樓主看看書,仔細看看編譯預處理都做了哪些事情。
程序設計語言的預處理的概念:在編譯之前進行的處理。 C語言的預處理主要有三個方面的內容: 1.宏定義; 2.文件包含; 3.條件編譯。 預處理命令以符號「#」開頭。
宏定義又稱為宏代換、宏替換,簡稱「宏」。預處理製作單純的宏展開,並不是檢查語法錯誤,所說義是錯誤的。
語法錯誤都是編譯階段才檢查的。預處理是不檢查的。
⑺ C語言宏定義演算法
宏只是在編譯的時候進行替換,而不會對定義的內容進行計算,只是單純的替換, 首先N 定義為2,M 定義為N+1, 在編譯的時候,C系統就會把這里的N變為2,
下面的NUM定義為了2*M+1,在編譯的時候,就直接把M變為N+1,放進去, 系統只是做了替換,
如果你用 #define N 2
#deine M (N+1)
#deine MUN 2*M+1 則可以得到MUN為2*(N+1)+1,要記住,宏只是替換,
⑻ 宏定義怎麼計算
宏定義一種抽象(Abstraction),它根據一系列預定義的規則替換一定的文本模式。
注意動詞「替換」,因此宏定義是不會真正「計算」任何東西,僅僅是「替換」而已。
例如:
#define MULTIPLY(x, y) x * y
這個宏定義不會計算 x 乘以 y這個表達式,而僅僅在編譯過程把MULTIPLY(x, y)形式的表達式替換成 x * y
而實際代碼中:MULTIPLY(1+2, 3)
替換後 1+2 * 3, 和預計計算 (1+2) * 3 完全不同。
⑼ C語言中的宏定義如何使用
宏定義又稱為宏代換、宏替換,簡稱"宏"。
格式:
#define 標識符 字元串
其中的標識符就是所謂的符號常量,也稱為"宏名"。
預處理(預編譯)工作也叫做宏展開:將宏名替換為字元串。
掌握"宏"概念的關鍵是"換"。一切以換為前提、做任何事情之前先要換,准確理解之前就要"換"。
即在對相關命令或語句的含義和功能作具體分析之前就要換:
例:
#define Pi 3.1415926
把程序中出現的Pi全部換成3.1415926
⑽ 在C語言中如何用標准宏定義實現計算兩個參數中的最小值
可以通過三目運算符(? :)實現,這樣定義,#define MIN(x,y) ((x)<(y)?(x):(y)),測試代碼如下,
//程序功能實現,計算兩個數的最小值
#include <stdio.h>
#define MIN(x,y) ((x)<(y)?(x):(y))
int main(int argc, char *argv[])
{
int x=10,y=15;
printf("MIN(%d,%d)=%d\n",x,y,MIN(x,y));
return 0;
}
需要注意的是,宏定義是原樣替換,需要保證替換後的准確性,例如,
#define MIN(x,y) (x<y?x:y),這樣定義後,宏表達式則可能出現問題,不是想要的結果,比如下面的例子,可以看出區別,編譯器不同結果可能不同。
#include <stdio.h>
#define MIN1(x,y) (x<y?x:y)
#define MIN2(x,y) ((x)<(y)?(x):(y))
int main(int argc, char *argv[])
{
int x=10,y=15;
printf("MIN1(%d,%d)=%d\n",x,y,MIN1(x+=2,y));//輸出MIN1(24,15)=24
x=10;
printf("MIN2(%d,%d)=%d\n",x,y,MIN2(x+=2,y));//輸出MIN2(14,15)=14
return 0;
}