導航:首頁 > 源碼編譯 > 編譯器歧義代碼

編譯器歧義代碼

發布時間:2022-12-28 20:08:47

① VB6自帶編譯器的「本機代碼」和「P代碼」各是什麼求答案

該選項卡設置工程編譯時的條件。選項卡選項「編譯為 P-代碼」
用 p 代碼來編譯工程。存儲在 .vbp 文件中的設置值將被覆蓋掉。
「編譯為本機代碼」
用帶有選定最優化的原碼來編譯工程。存儲在 .vbp 文件中的設置值將被覆蓋掉。
「快速代碼優化」- 通過指示編譯器在速度和大小之間首選速度,使 .exe 和 .dll 文件的速度最快。編譯器可以減少許多功能上跟機器碼序列相同的構造。在某些情況下,這種不同提供了用大小來換取速度的權衡交換。
「小代碼優化」- 通過指示編譯器在速度和大小之間首選大小,來使 .exe 和 .dll 文件最小。編譯器可以減少許多功能上跟機器碼序列相同的構造。如果不選中這個選項,代碼可能就會大一些,但是速度會更快一些。
「非優化」- 無優化地編譯。
「流行的 Pentium Pro™」- 優化所創建的代碼,優化方向是使之更有利於 Pentium Pro™ 處理器來處理。如果在程序中使用了這個選項,則意味著僅僅是為 Pentium Pro™ 處理器所創建的代碼。用此選項產生的代碼仍然可以在更早期的處理器上運行,但是工作起來性能不是那麼好。
「創建符號化調試信息」- 在可執行文件或者 DLL 文件中產生符號調試信息。用此選項創建的可執行文件可以用 Visual C++ 或者具有 CodeView 風格調試信息的調試器來調試。設置這個選項將為可執行文件產生一個帶有符號信息的 .pdb 文件。
「高級優化」
顯示「高級優化」對話框。
給程序設置一個基地址,從而覆蓋 .dll 文件的預設位置(在 0 X 10,000,000 處)。操作系統首先試圖在指定的或者預設的位置載入一個程序。如果沒有足夠空間,那麼系統將重新定位該程序。

② C語言賦值語句:a=b=c;會不會因為不同的C編譯器而存在歧義

只要是C語言平台,只要是a、b、c都正確聲明過並且c已經賦過值,a=b=c;的意義就是確切的,不會因C編譯器的不同面不同。

③ 編譯器報:未調用原型函數(是有意用變數定義的嗎

編譯器報:未調用原型函數(是有意用變數定義的嗎?)(本文為原創,轉載清註明出外)
MSDN解釋:編譯器檢測到未使用的函數原型。如果有意將該原型作為變數聲明,則移除左/右括弧。什麼意思,簡單來說,就是編譯無法分辨你當前的代碼是在聲明一個函數原型,還是在調用一個函數.因為在VS編譯器里這樣聲明一個函數是正確的:test(int(a),int(b)),但我們經常用他做為函數調用來使用。
Code
// compile with: /W1
class Lock {
public:
int i;
};

void f() {
Lock theLock();
// try the following line instead
// Lock theLock;
}

int main() {
}
當然你的意圖是調用一個無參構造函數,然而編譯器卻認為你在聲明一個函數.所以報錯了.

解決方法是這樣調用:test((int(a)),(int(b)));編譯通過!!

附MSDN的一個常式:

Code
class BooleanException
{
bool _result;

public:
BooleanException(bool result)
: _result(result)
{
}

bool GetResult() const
{
return _result;
}
};

template<class T = BooleanException>
class IfFailedThrow
{
public:
IfFailedThrow(bool result)
{
if (!result)
{
throw T(result);
}
}
};

class MyClass
{
public:
bool Foo()
{
try
{
IfFailedThrow<>(MyMethod()); //error

// try one of the following lines instead
// IfFailedThrow<> ift(MyMethod());
// IfFailedThrow<>(this->MyMethod());
// IfFailedThrow<>((*this).MyMethod());

return true;
}
catch (BooleanException e)
{
return e.GetResult();
}
}

private:
bool MyMethod()
{
return true;
}
};

int main()
{
MyClass myClass;
myClass.Foo();
}
//在上面的示例中,不含參數的方法的結果作為參數傳遞給未命名本地類變數的構造函數。該調用會產生歧義:既可以是命名本地變數,也可以是使用對象實例以及相應的指向成員的指針運算符給方法調用加前綴。

④ C語言編譯器會編譯改變過的代碼,而不會編譯沒有改動的代碼。 我想知道它是怎麼判斷程序是否有唄修改過的

編譯器要記錄你的編譯生成文件,比如obj、exe等的生成日期,發現與相關的文件如.c源文件、obj等日期舊時則選擇對此部分重新編譯。
特別地,它記錄所有相關文件,比如你新修改了某頭文件.h,編譯系統會逐一比較所有使用這個.h文件的編譯結果,如果發現時間舊了就重新編譯它們。

⑤ 如何用編譯器將自己的源代碼轉換成目標代碼

我們使用編譯器將自己的源代碼轉換成目標代碼,
使用鏈接器將我們的目標代碼鏈接成一個可執行程序。另外,
我們使用一些程序在計算機中輸入源代碼文本並且編輯它。這些是最初的和最重要的工具,
它們構成程序員的工具集合或「程序開發環境」。
如果你使用的是命令行窗口,
就像很多專業程序員所做的那樣,
你將不得不自己來編寫編譯和鏈接命令。如果你使用IDE(「互動式開發環境」或「集成式開發環境」),
就像很多程序員所做的那樣,
簡單地點擊正確按鈕就可以完成這個工作。附錄C介紹了如何在你的C++實現中編譯和鏈接。
IDE通常包括一個具有有用特性的編輯器,
例如用不同顏色的代碼來區分你的源代碼中的注釋、
關鍵字和其他部分,
以及其他幫助你來調試代碼、
編譯和運行代碼的功能。調試是發現程序中的錯誤和排除錯誤的活動,
你在前進的道路上會聽到很多有關它的內容。
我們使用微軟的Visual
C++作?喑炭
⒒肪呈道
H綣
頤羌虻サ廝怠氨嘁肫鰲被蚴恰癐DE」的某些部分,
那就是所指Visual
C++系統。但是,
你可以使用一些提供最新的、
符合標準的C++實現的系統。我們所說的大多數內容(經過微小的修改)對所有的C++實現都將是正確的,
並且其代碼可以在任何地方運行。在工作中,
我們使用幾種不同的實現。

⑥ (c語言)我找到問題了,編譯器沒有報錯,還可以運行,誰能解答一下

你這代碼錯了
能運行但是,不建議這樣寫,因為有歧義
%s->字元串(char[])佔位符
%c->單個字元(char)佔位符
char a;//單個字元
char s[10];//字元串
scanf("%c",&a);//輸入單個字元
scanf("%s",s);//輸入字元串
printf("%c",a);//輸出單個字元
printf("%s",s);//輸出字元串

⑦ c語言編譯器如何運行

編譯共分為四個階段:預處理階段、編譯階段、匯編階段、鏈接階段。

1、預處理階段:

主要工作是將頭文件插入到所寫的代碼中,生成擴展名為「.i」的文件替換原來的擴展名為「.c」的文件,但是原來的文件仍然保留,只是執行過程中的實際文件發生了改變。(這里所說的替換並不是指原來的文件被刪除)

2、匯編階段:

插入匯編語言程序,將代碼翻譯成匯編語言。編譯器首先要檢查代碼的規范性、是否有語法錯誤等,以確定代碼的實際要做的工作,在檢查無誤後,編譯器把代碼翻譯成匯編語言,同時將擴展名為「.i」的文件翻譯成擴展名為「.s」的文件。

3、編譯階段:

將匯編語言翻譯成機器語言指令,並將指令打包封存成可重定位目標程序的格式,將擴展名為「.s」的文件翻譯成擴展名為「.o」的二進制文件。

4、鏈接階段:

在示例代碼中,改代碼文件調用了標准庫中printf函數。而printf函數的實際存儲位置是一個單獨編譯的目標文件(編譯的結果也是擴展名為「.o」的文件),所以此時主函數調用的時候,需要將該文件(即printf函數所在的編譯文件)與hello world文件整合到一起,此時鏈接器就可以大顯神通了,將兩個文件合並後生成一個可執行目標文件。

⑧ 編譯器預定義的宏(可以用來區分使用的是哪種編譯器) 詳細�0�3

1、_MSC_VER 是微軟C/C++編譯器——cl.exe 編譯代碼時預定義的一個宏。需 要針對cl 編寫代碼時, 可以使用該宏進行條件編譯。 2、_MSC_VER 的值表示cl 的版本。需要針對cl 特定版本編寫代碼時, 也可以使用 該宏進行條件編譯。 3、_MSC_VER 的類型是"int",具體版本號定義如下: MS VC++ 9.0 _MSC_VER = 1500 MS VC++ 8.0 _MSC_VER = 1400 MS VC++ 7.1 _MSC_VER = 1310 MS VC++ 7.0 _MSC_VER = 1300 MS VC++ 6.0 _MSC_VER = 1200 MS VC++ 5.0 _MSC_VER = 1100 其中MS VC++ 9.0 就是Visual C++ 2008,MS VC++ 8.0 就是Visual C++2005。 二、介紹預定義宏「__GNUC__」 1、__GNUC__ 是gcc 編譯器編譯代碼時預定義的一個宏。需要針對gcc 編寫代碼時, 可以使用該宏進行條件編譯。 2、__GNUC__ 的值表示gcc 的版本。需要針對gcc 特定版本編寫代碼時,也可以使 用該宏進行條件編譯。 3、__GNUC__ 的類型是「int」 三、預定義宏"__MINGW32__" 1、MinGW編譯器 四、symbian sdk 預定義宏: symbian 平台,定義"__SYMBIAN32_" 3rd MR 版及之前的那個3rd 版本,定義"__SERIES60_30__" 3rd FP1 版,定義"__SERIES60_31__" 3rd FP2 版,定義"__SERIES60_32__" 另外,還有一個"__SERIES60_3x__"。若不需區分具體是哪一個3rd 版,則用之。

編程序有歧義性,怎麼解決

程序找錯最好藉助編譯器調試,設置斷點一句一句的檢查每個時刻各變數的值。這樣雖然煩瑣卻很准確,如果你有經驗,能夠猜測出大概哪句出的問題,效率就高多了。程序排錯不藉助編譯器而自己冥思苦想是完全不可行的!
看書不能停斷,但是也絕對要多寫程序,實踐很重要(一般先看書再關了書寫程序)。如果自己花很多時間都找不到錯誤最好求助於人,好多錯誤一個人是發現不了的。這方面要不停總結經驗,加油吧。

⑩ 編譯器是什麼

簡單講,編譯器就是將「一種語言(通常為高級語言)」翻譯為「另一種語言(通常為低級語言)」的程序。一個現代編譯器的主要工作流程:源代碼 (source code) → 預處理器 (preprocessor) → 編譯器 (compiler) → 目標代碼 (object code) → 鏈接器 (Linker) → 可執行程序 (executables)
高級計算機語言便於人編寫,閱讀交流,維護。機器語言是計算機能直接解讀、運行的。編譯器將匯編或高級計算機語言源程序(Source program)作為輸入,翻譯成目標語言(Target language)機器代碼的等價程序。源代碼一般為高級語言 (High-level language), 如Pascal、C、C++、Java、漢語編程等或匯編語言,而目標則是機器語言的目標代碼(Object code),有時也稱作機器代碼(Machine code)。
對於C#、VB等高級語言而言,此時編譯器完成的功能是把源碼(SourceCode)編譯成通用中間語言(MSIL/CIL)的位元組碼(ByteCode)。最後運行的時候通過通用語言運行庫的轉換,編程最終可以被CPU直接計算的機器碼(NativeCode)。
編譯是從源代碼(通常為高級語言)到能直接被計算機或虛擬機執行的目標代碼(通常為低級語言或機器語言)的翻譯過程。然而,也存在從低級語言到高級語言的編譯器,這類編譯器中用來從由高級語言生成的低級語言代碼重新生成高級語言代碼的又被叫做反編譯器。也有從一種高級語言生成另一種高級語言的編譯器,或者生成一種需要進一步處理的的中間代碼的編譯器(又叫級聯)。
典型的編譯器輸出是由包含入口點的名字和地址, 以及外部調用(到不在這個目標文件中的函數調用)的機器代碼所組成的目標文件。一組目標文件,不必是同一編譯器產生,但使用的編譯器必需採用同樣的輸出格式,可以鏈接在一起並生成可以由用戶直接執行的EXE,
所以我們電腦上的文件都是經過編譯後的文件。

閱讀全文

與編譯器歧義代碼相關的資料

熱點內容
程序員大戰外掛 瀏覽:737
html實例教程pdf 瀏覽:155
linux命令開放所有許可權 瀏覽:573
30歲能學會編程 瀏覽:735
小火箭的伺服器是什麼 瀏覽:967
cad查信息命令 瀏覽:402
XP禁止新建文件夾 瀏覽:394
程序員的悲慘生活 瀏覽:207
什麼找房app比較好用 瀏覽:202
手機視頻剪輯壓縮 瀏覽:320
中華軟體庫源碼資源共享 瀏覽:69
極雲普惠沒有合適的前端伺服器 瀏覽:173
伺服器空白處怎麼辦 瀏覽:677
stm單片機控制機械臂 瀏覽:192
施工方案整理到文件夾叫什麼名 瀏覽:958
霍夫曼編碼演算法 瀏覽:544
生成解決方案等於編譯加鏈接嗎 瀏覽:22
俄羅斯加密貨幣計劃 瀏覽:826
linuxonarm 瀏覽:737
表格文件加密後還是無法打開 瀏覽:582