關于C生成的匯編與C++生成的匯編在函數名稱上的差異

最近用到ucos,這個RTOS本身是用C語言和部分匯編編寫,而自己又打算用C++來寫應用,在其中遇到幾個問題,一番折騰之后,讓我更加深刻認識到了在一些一般不注意的細節上,C與C++的不同。
??? 1、對于ucos,雖然我想Labrosse先生值得我們尊敬,為我們提供了ucos這么一個優秀的學習、應用RTOS的樣本。但是我認為,Labrosse先生的C/C++語言功力還算不上爐火純青。一個簡單例子,在C中,右值無論是何種類型,皆可以強制轉換為左值類型而不用強制說明(但最好自己聲明轉換)。ucos中大量的類型并沒有手工聲明轉換類型,而恰恰C++中,這樣是通不過編譯的(除了基本類型轉換)。這樣,當我在工程中使用C++編譯器來編譯時,就會報告大量的類型轉換出錯。這個也許還算OK,自己一條一條加上就OK了。
??? 2、對于第二個問題,這與Labrosse先生無關了,不過我還是被折騰好半天。當我修改好上面的問題后,編譯再次出錯,這次問題提示說,系統調度的一些核心函數沒有定義。這我可暈了半天,找了大半天問題,除了發現這些報告未定義的函數都是出自于一個ASM匯編寫的函數之外,似乎其他頭緒了。這時候,我想,會不會是C編譯器生成的目標文件的函數名與C++編譯器生成的目標文件的函數名不同,因為ucos的C代碼中會調用到ASM中的函數。于是,我自己用提供的C和C++編譯器,分別對兩段相同的函數文件(只是后綴名不同,一個C一個CPP)進行編譯。果然不出所料,的確不同。例如我們在C/CPP中命名一個函數,例如 OSTickISR(),在C編譯器生成的ASM中,名稱是?_OSTickISR;在C++編譯器生成的ASM中,名稱是@OSTickISR$qv。而原ASM文件都是用C編譯器一樣的格式來聲明的,所以以前直接用C編譯能夠正確,而現在換C++編譯器就出錯。
??? 至此,我的代碼終于能夠順利和修改后的ucos一起用C++編譯器進行編譯了。
??? 以前我們區別C與C++的不同,主要還是集中例如面向對象,STL,Template等技術至上,對于這些小細節了解很少。通過這次的問題,讓我更加深刻認識到,C++與C,在除了面向對象的層次上,還存在大量的不同,C++ is not a better C。
?
?? (該規范適用于Borland C++所帶的編譯器和鏈接器)

轉載于:https://www.cnblogs.com/leaway/archive/2006/04/27/386107.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/536353.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536353.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536353.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

UVA401????????Palindromes【字符串】

Palindromes UVA - 401 題目傳送門 題目大意&#xff1a;給你一個字符串&#xff0c;判斷其是回文串還是鏡像串。 AC代碼&#xff1a; #include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #include <cstdlib> #…

IIS 5 與IIS 6 原理介紹

[ 轉] ASP.NET Process Model之一&#xff1a;IIS 和 ASP.NET ISAPI 前幾天有一個朋友在MSN上問我“ASP.NET 從最初的接收到Http request到最終生成Response的整個流程到底是怎樣的&#xff1f;”我覺得這個問題涉及到IIS和ASP.NETASP.NET Runtime的處理模型的問題&#xff0c;…

UVA340????????Master-Mind Hints【數組】

Master-Mind Hints UVA - 340 題目傳送門 題目大意&#xff1a;先輸入一個整數n&#xff0c;表示有n個數字&#xff0c;下面第一行代表正確答案&#xff0c;其下每一行代表用戶猜的答案&#xff0c;需統計其有多少數字位置正確&#xff08;A&#xff09;&#xff0c;有多少數…

教你如何把自己從好友的QQ中刪除

在QQ中&#xff0c;有些人看了不太順眼&#xff0c;真不知當初為何讓他加自己為好友的&#xff01; 那有什么辦法&#xff0c;可以把自己從對方的QQ中刪除呢&#xff1f; 其實&#xff0c;用QQ就可以輕松搞定&#xff01; 讓我來為你支一招吧&#xff01; 打開QQ&#xff0…

UVA1583?Digit Generator

Digit Generator UVA - 1583 題目傳送門 題目大意&#xff1a;若x的各位數之和加上x本身等于y&#xff0c;則證明x是y的生成元&#xff0c;求輸入數字n的最小生成元。 AC代碼&#xff1a; #include <cstdio> #include <iostream> #include <algorithm> …

C++內存詳解

偉大的Bill Gates 曾經失言&#xff1a; 640K ought to be enough for everybody — Bill Gates 1981 程序員們經常編寫內存管理程序&#xff0c;往往提心吊膽。如果不想觸雷&#xff0c;唯一的解決辦法就是發現所有潛伏的地雷并且排除它們&#xff0c;躲是躲不了的。本文的內…

UVA1584????????Circular Sequence【字符串】

Circular Sequence UVA - 1584 題目傳送門 題目大意&#xff1a;輸入一個環形字符串&#xff0c;需輸出其最小字典序的形式的字符串。 AC代碼&#xff1a; #include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #includ…

UVA1585 Score

Score UVA - 1585 題目傳送門 題目大意&#xff1a;輸入一個字符串&#xff0c;O的分數為1&#xff0c;若出現連續的O&#xff0c;如OOOO...&#xff0c;分數為1,2,3,4...&#xff0c;X為0分&#xff0c;求最終的分數 AC代碼&#xff1a; #include <cstdio> #includ…

operater int()

class Number { int number; public: explicit Number(int n){number n;} operator int() //注意一定不能聲明返回值 { return number; } }; int main () { Number n1 Number(100); int n2 n1; cout << n2 << endl; re…

UVA1586???????? Molar mass

Molar mass UVA - 1586 題目傳送門 題目大意&#xff1a;給你一個只包含C,H,O,N分子式&#xff0c;其中C,H,O,N的原子量分別為&#xff1a;12.01,1.008,16.00,14.01&#xff0c;求其分子量 AC代碼&#xff1a; #include <cstdio> #include <iostream> #includ…

SharePoint v3:忘掉模擬用戶Impersonate,SPSecurity.RunWithElevatedPrivileges來了

回顧&#xff1a; 在SharePoint V2 大家應該都用過模擬用戶Impersonate這個功能&#xff0c; 這個功能用來暫時提升某個用戶的權限&#xff0c;比如某個普通用戶的本來不能修改某個列表的值&#xff0c;但是我們功能需要在修改。 缺點&#xff1a; 我們使用這個模擬用戶功能…

UVA1225????????Digit Counting

Digit Counting UVA - 1225 題目傳送門 題目大意&#xff1a;輸入一個數字T&#xff0c;代表有T組測試數據&#xff0c;下面每行有一個整數n&#xff0c;求將1到n的數字連成一串后每個數字出現的個數。 AC代碼&#xff1a; #include <cstdio> #include <iostream&…

Chess Queen【數學】

Chess Queen UVA - 11538 題目傳送門 題目大意&#xff1a;輸入兩個整數n,m&#xff0c;在n行m列的棋盤中放入白黑兩個棋子&#xff0c;棋子在同一行、同一列或同一對角線上能相互進攻&#xff0c;問有多少種擺放方案。 AC代碼&#xff1a; #include <cstdio> #incl…

Java開發中保證接口的冪等性問題

目錄 1、解決方案 2、使用token保證接口冪等性的例子 3、在實際項目中&#xff0c;如何有效地使用token法來保證接口的冪等性&#xff1f; 4、3示例中如何獲取請求中的 token 5、如果token驗證失敗&#xff0c;如何處理 6、在上述示例代碼中加上token過期后重置的功能 7…

typedef 的四個用途和兩大陷阱

>>>>>用途一&#xff1a;定義一種類型的別名&#xff0c;而不只是簡單的宏替換。可以用作同時聲明指針型的多個對象。比如&#xff1a;char* pa, pb; // 這多數不符合我們的意圖&#xff0c;它只聲明了一個指向字符變量的指針&#xff0c; // 和一個字符變量&am…

Triangle Counting【數學】

Triangle Counting UVA - 11401 題目傳送門 題目大意&#xff1a;輸入一個整數n&#xff0c;求在1到n中選取三條邊能夠組成多少種三角形。 AC代碼&#xff1a; #include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #in…

Cheerleaders【容斥】

Cheerleaders UVA - 11806 題目傳送門 題目大意&#xff1a;給你三個整數n,m,k&#xff0c;代表有一個n行m列的場地&#xff0c;共有k個人&#xff0c;需保證在最外圍的一圈的每行每列都必須要有一個人&#xff0c;若這個人在對角上&#xff0c;則可以當做他所在的行列都已經…

Exploring Pyramids【動態規劃——區間DP】

Exploring Pyramids UVALive - 3516 題目傳送門 題目大意&#xff1a;給你一個字符串&#xff0c;其代表的是機器人來回走過的路徑&#xff0c;機器人總是先走左邊再走右邊&#xff0c;問有多少種情況。 解決方法&#xff1a;設輸入序列為S&#xff0c;d(i,j)為子序列Si,Si…

Investigating Div-Sum Property【數位DP】

Investigating Div-Sum Property UVA - 11361 題目傳送門 題目大意&#xff1a;輸入三個數a,b,k&#xff0c;問從a到b中有多少個數滿足數字能夠整除k&#xff0c;并且其數位和也能整除k。 解決方法&#xff1a;數位DP的模板題&#xff0c;Dp[x]表示在不超過x的數中滿足條件…

UVA - 455?Periodic Strings【字符串】

Periodic Strings UVA - 455 題目傳送門 題目大意&#xff1a;先輸入一個數字n&#xff0c;在輸入n行字符串&#xff0c;對每一個字符串輸出其最小的周期長度&#xff0c;每兩個輸出間有一空行。 AC代碼&#xff1a; #include <cstdio> #include <iostream> #…