編譯提示宏重定義
『壹』 編譯C程序出現多重定義,怎麼解決
應該是你在2個c文件中都定義了全局的MmiUtil_WaitKeyMenu,可以聲明為static,或者改個名字
『貳』 C++宏可以被多次重新定義嗎
不可以,只能這樣:
#ifndef A
#define A 10
#endif
....
如果需要重新定義,要這樣,先取消定義,再重新定義:
#ifdef A
#undef A
#endif
...
#ifndef A
#define A 20
#endif
『叄』 winuser.h和resource.h宏重定義問題
跟你裝同時vc6和2010沒關系。找到你IDOK的按鈕把標識符改一下就成了,再把resource.h中的刪除掉。
『肆』 帶參數的宏定義這樣聲明編譯報錯,怎麼回事
1.用sbit先聲明一下變數,比如sbit LED=P2^0,然後在用宏
『伍』 計算機編譯系統對宏定義在編譯時進行語法檢查這句話為什麼錯
第一步被換為area=a*b。
宏定義末尾不加分號,減少輸入錯誤和便於修改。宏替換在編譯前進行,不做表達式求解函數調用在編譯後程序運行時進行,只佔編譯時間。
除了一般的字元串替換,函數調用不會。
宏展開不佔運行時間,不分配內存。
宏的啞實結合不存在類型,作用域為其後的程序,還要做參數代換。
格式:數組大小常用宏定義。
預處理是在編譯之前的處理。
宏定義又稱為宏代換;
",利用宏則可以設法得到多個值。
宏展開使源程序變長。
函數只有一個返回值,預處理不做語法檢查。一切以換為前提,准確理解之前就「換」;宏"1;第一步換為area=r*r;
正確的宏定義是#define
S(r)
(r)*(r);
宏名和參數的括弧間不能有空格;
宏替換只作替換:
#define
宏名(參數表)
字元串;
例如、值傳遞:
#define
標識符
字元串;
其中的標識符就是所謂的符號常量,b)
a*b;
area=S(3:
(1)宏名一般用大寫;
(2)使用宏可提高程序的通用性和易讀性,也沒有類型轉換,第二步被換為area=3*2,而編譯工作的任務之一就是語法檢查:將宏名替換為字元串.帶參數的宏、做任何事情之前先要換,並且分配內存。
預處理(預編譯)工作也叫做宏展開;中永遠不包含宏。
(3)宏定義不分配內存;
(4)宏定義寫在函數的花括弧外邊;
,不做計算:
#define
PI
3,第二步被換為area=a+b*a+b:
(5)實參如果是表達式容易出問題:
#define
S(r)
r*r
area=S(a+b)。
即在對相關命令或語句的含義和功能作具體分析之前就要換;
類似於函數調用。
格式.1415926。
把程序中出現的PI全部換成3。
(6)可以用#undef命令終止宏定義的作用域。
(7)宏定義可以嵌套。
(8)字元串",變數定義分配內存,通常在文件的最開頭。1415926說明,也稱為「宏名」,簡稱「宏」、宏替換。
『陸』 製作的宏啟用時提示編譯錯誤
ActiveSheet.Pictures , Insert
這里應該不是逗號,應該是點。
ActiveSheet.Pictures.Insert
『柒』 c語言中怎樣修改宏定義呢
什麼意思?是在定義宏後的程序代碼中改,還是在編輯宏定義的時候該?
如果是前者,宏定義是在預編譯時是就決定的,在程序運行時是不能改的;如果是後者,直接改就行了。
『捌』 為什麼編譯器會提示重定義
這種情況並不會報重定義
所以一定是在你的project裡面定義了其它同名函數
你可以試試把你的函數定義和調用都改成一個你平時不用的名字
另外說一句,c語言不會生成任何默認函數或者變數,它就是這么弱智
『玖』 c語言,說宏展開是在編譯時進行的,啥意思啥叫編譯時進行的
c語言編寫出來的代碼叫源代碼,是供人看的,如果想讓機器執行,需要轉換成機器語言,這個轉換過程就叫編譯。
在c語言中定義的宏,在編譯時,會展開(或叫替換)為實際的語句,如:
#define MAX 100
void main()
{
int a=MAX ;
printf("a=%d\n", a );
}
這里MAX是個宏,當編譯時,這段代碼就會變成:
void main()
{
int a=100; //這里的MAX會變成100
printf("a=%d\n", a );
}
這就是宏展開、宏替換,然後編譯器,按這樣子的源代碼進行編譯,生成執行程序
『拾』 (C語言)定義宏 以防止重復包含此頭文件 這句話是什麼意思
當1個C語言程序由 多個 源程序文件 組成時,由於每個 源程序文件 都有 #include <...>
#include "...h", 最終它們可能形成交叉 包含 和 重復包含 現象 而造成錯誤。
為了避免這種情況發生,可以 採用 定義宏 的方法 把各個頭文件 包起來。
編譯器 在正式編譯的開始,現處理 宏 -- 也就是「預編譯命令".
用 宏(#號開始的行) 把 頭文件內容 包起來:
#ifndef _HEADER_One_H_ // 意思是:宏開始行,如果還沒有定義 _HEADER_One_H_ 則 進入,否則退出
#define _HEADER_One_H_ //定義 _HEADER_One_H_//
header1.h
頭文件內容
#endif // 宏結束行