宏的實參不足編譯器
① c語言 我是初學者
不用、、、
可以用來換行,如
#include<stdio.h>
#defineN
123456789
intmain(void)
{
printf("%d ",N);
return0;
}
/*
#defineN
123456789
//等價於#defineN123456789
*/
② C語言出現expected identifier or '('是什麼意思
C語言出現expected identifier or '('是出現了編寫錯誤,Error Message:Compilation failed with errors:q2/frac.c:32:1: expected identifier or '('
在這段程序中:void fr_rece(struct frac *a) {int g = gcd((*a).num, (*a).denom);(*a).num = ((*a).num / g);(*a).denom = ((*a).denom / g);if((*a).denom < 0){(*a).denom = -(*a).denom;}}
問題出在:{int s;s=a+b;return(s);}前面缺了函數首部,應為:int sum(int a,int b){int s;s=a+b;return(s);}
(2)宏的實參不足編譯器擴展閱讀:
C語言是一門通用計算機編程語言,廣泛應用於底層開發。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
C語言一共只有32個關鍵字,9種控制語句,程序書寫形式自由,區分大小寫。把高級語言的基本結構和語句與低級語言的實用性結合起來。C 語言可以像匯編語言一樣對位、位元組和地址進行操作,而這三者是計算機最基本的工作單元。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
參考資料:網路-c語言
③ C語言函數問題。帶參數的宏ab這里是實參,下面mn也是實參,所以這里是下面的實參傳給上面的實參嗎
普通函數的聲明,定義里用的叫形參,普通函數調用時,調用語句里的參數叫實參。
宏與它們不一樣,宏在預編譯期間,做的工作 是 替代 (字元替代,名字替代)。
#defind area(a,b) (PI * a * b) 裡面的 PI 要被 前面PI 的 宏定義 替代成:
#defind area(a,b) ((asin(1) * 2) * a * b)
然後程序里的 s = area(m,n); 要用 area(a,b) 的 宏 替代,同時要把 實際參數 m,n代入,變成:
s = ((asin(1) * 2) * m * n);
上述工作完成後,編譯器,再把 這個替代工作完成後的 源程序, 編譯和鏈接成 可執行程序 .exe 文件。
④ 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否(!)
}
(4)宏的實參不足編譯器擴展閱讀
C語言中宏定義的優點
方便程序的修改
使用簡單宏定義可用宏代替一個在程序中經常使用的常量,這樣在將該常量改變時,不用對整個程序進行修改,只修改宏定義的字元串即可,而且當常量比較長時, 可以用較短的有意義的標識符來寫程序,這樣更方便一些。
相對於==全局變數==兩者的區別如下:
1、宏定義在編譯期間即會使用並替換,而全局變數要到運行時才可以。
2、宏定義的只是一段字元,在編譯的時候被替換到引用的位置。在運行中是沒有宏定義的概念的。而變數在運行時要為其分配內存。
3、宏定義不可以被賦值,即其值一旦定義不可修改,而變數在運行過程中可以被修改。
4、宏定義只有在定義所在文件,或引用所在文件的其它文件中使用。 而全局變數可以在工程所有文件中使用,只要再使用前加一個聲明就可以了。換句話說,宏定義不需要extern。
⑤ 關於C++宏定義問題
C++
宏定義
將一個
標識符
定義為一個字元串,
源程序
中的該標識符均以指定的字元串來代替。前面已經說過,
預處理命令
不同於一般C++語句。因此預處理命令後通常不加分號。這並不是說所有的預處理命令後都不能有分號出現。由於宏定義只是用宏名對一個字元串進行簡單的替換,因此如果在宏定義命令後加了分號,將會連同分號一起進行置換。
定義帶參數的宏時,宏體中與參數名相同的字元串適當地加上
圓括弧
是十分重要的,這樣能夠避免
可能產生的錯誤。例如,對於宏定義:
#define
SQ(x)
x*x
當程序中出現下列語句:
m=SQ(a+b);
替換結果為:
m=a+b*a+b;
這可能不是我們期望的結果,如果需要下面的替換結果:
m=(a+b)*(a+b);
應將宏定義修改為:
#define
SQ(x)
(x)*(x)
對於帶參的宏定義展開置換的方法是:在程序中如果有帶
實參
的宏(如"SUB(2,3)"),則按"#define"命令行中指定的字元串從左到右進行置換。如果串中包含宏中的
形參
(如a、b),則將程序語句中相應的實參(可以是常量、變數或者表達式)代替形參,如果宏定義中的字元串中的字元不是參數字元(如a-b中的-號),則保留。這樣就形成了置換的字元串。
⑥ 帶參數的宏定義中,程序中引用宏定義的實參( d )。 A. 只能是常量 B. 只能是整型量 C. 只能是整型表達式 D.
選擇D吧
因為前ABC三個都是可以輸入作為實參的,宏都是直接替換,只要能替換,你管它是什麼。