作者查詢 / GNUGCC
作者 GNUGCC 在 PTT [ C_and_CPP ] 看板的留言(推文), 共492則
限定看板:C_and_CPP
7F→:這個用法比較有可能是 xxx.cpp 有 void FUNCTION(void){}08/12 22:07
8F→:的實體,所以 include "xxx.h" 遇到函式原型就不需加上08/12 22:09
9F→:extern,編譯器能判斷屬內部連結,那其他 .cpp 檔如果08/12 22:10
10F→:include "xxx.h" 而沒有 void FUNCTION(void){} 實體的話,08/12 22:10
11F→:就會遇到 extern void FUNCTION(void); 的定義了,編譯器會08/12 22:12
12F→:把呼叫 FUNCTION() 函式的敘述交給 Linker 來處理,而不用等08/12 22:13
13F→:到全部 .cpp 檔編譯完後發現沒有 FUNCTION 實體才交給08/12 22:14
14F→:Linker 處理外部連結,純粹是編譯效率的考量.08/12 22:15
7F→:可以試著使用 LoadLibrary() 與 GetProcAddress() 函式.08/11 20:31
4F→:利用 template class map<> 的方式也是可以的,但產生出來的08/10 23:00
5F→:執行檔會變大,因為它包含很多程式碼在裡面,但好處是很方便08/10 23:02
6F→:提供部份可操作的演算法,但如果各位有看過 map<> 的原始碼08/10 23:04
7F→:就能看出 map<> 是以紅黑樹當做它儲存資料容器,對只儲存小08/10 23:07
8F→:型的資料來說等於是殺雞用牛刀.08/10 23:09
4F→:void main(void) 的寫法是可行的唷^^08/10 00:59
6F→:雖然這個寫法較傳統,但是語法與文法都正確哦^^08/10 02:16
13F→:大部份範例程式都是使用 int main(void) 然後回傳一個 0 給08/10 20:14
14F→:作業系統,但如果這真的是標準,那編譯器顯然會出現錯誤了.08/10 20:17
15F→:目前我使用的 Visual C++ 都接受 void main(void) 與08/10 20:18
17F→:int main(void),各位可以把 C++ 專案改成原生 C++ 類型來08/10 20:19
19F→:用 void main(void) 來寫發現也可通過編譯.08/10 20:21
21F→:呵呵~我沒用過 Apple 的,我使用的 Turbo C++ 與08/10 20:25
22F→:Borland C++, Windows 的 Visual C++ 任何版本的原生 C++08/10 20:25
24F→:專案都可用 void main(void) 方式,C++ .Net 專案似乎也是跟08/10 20:27
25F→:著標準走.08/10 20:29
28F→:其實這是完全看個人編碼風格,但如果編譯器不接受 void 的08/10 20:46
29F→:方式那就需改用 int 了,g++ 的標準是對的,因為它符合文件規08/10 20:48
30F→:範,Visual C++ 的方式也不能說是錯的,只是它保留了傳統與彈08/10 20:49
31F→:性,至於怎麼使用就看個人怎麼選擇了^^08/10 20:50
33F→:語法是對的,但是否符合規範完全取決於編譯器了.08/10 20:55
36F→:void main(void) 與 int main(void) 都是屬於 C 與 C++ 的08/10 22:36
37F→:主程式,這個在 16 bit 時代是可用的,就好像是 Windows API08/10 22:39
38F→:有支援 16 bit 與 32 bit,那為什麼 Windows 還持續保留了08/10 22:41
39F→:16 bit 的版本,要使用那一個版本見人見智了^^08/10 22:44
40F→:更簡單的說是「不符合規範不代表不可以用」.08/10 22:56
43F→:這個就是屬於相容性的議題了,因為必竟 C++ 程式在經過編譯08/10 23:17
44F→:後會產生組合語言程式,然後再透過組譯與連結產生出機器碼,08/10 23:18
45F→:只要能產生出 x86 指令碼為何不用?08/10 23:20
47F→:哈~好像違背原始議題了...^^08/10 23:29
53F→:Feis : int Q_Q() 這個語法正確但是欠缺可讀性.08/11 00:43
54F→:uranusjr : 並非不尊重 GCC,純屬個人編碼風格,況且這個寫法08/11 00:46
55F→:對於一些從 16 bit 時代開始就在寫程式的人就知道代表的意08/11 00:47
56F→:義.08/11 00:49
63F→:沒錯,只是相容性的問題,如果編譯器不支援舊式寫法就必需改08/11 06:57
64F→:成新式了,重點是舊式跟新式的寫法都必需了解然後從中擇一.08/11 06:59
74F→:Visual C++ 有支援舊式的寫法並且編譯不會有任何錯誤跟警告08/11 20:21
75F→:有它的功能所在,它可以相容於舊式寫法而不必重新修改,08/11 20:22
76F→:這個就是 Visual C++ 的彈性.08/11 20:23
77F→:我剛把 void main(void) 與 int main(void) 轉換成組合語言08/11 20:24
78F→:的結果就是,這 2 種寫法導致組合語言碼相同,也就是這樣:08/11 20:24
79F→:xor ax,ax08/11 20:25
80F→:ret08/11 20:25
81F→:顯示作業系統會從 ax 取得為 0 的數值.08/11 20:26
82F→:所謂的編碼風格不代表一定要這樣做,只是個人寫碼習慣不同,08/11 20:27
83F→:要怎麼使用完全取決於屬於自已的習慣.08/11 20:28
86F→:呵呵~ Visual C++ 好像不會修改客戶端的程式碼唷^^08/11 20:49
87F→:各人編碼風格與 ID 無關...請各位不要做過多的連想^^08/11 20:51
91F→:我用 Visual C++ 2008 以 Debug 啟動反組譯看到原始碼沒變08/12 20:06
92F→:唷^^但組合語言卻是相同的.08/12 20:07
93F→:Visual C++ 6.0 更簡潔,只有這段組合語言程式 :08/12 20:08
94F→:ret 208/12 20:08
95F→:顯然 Visual C++ 2008 會再次確認 eax 暫存器為 0,只是少用08/12 20:10
96F→:了 2 個位元組的堆疊空間,各位可以試看看.08/12 20:11
3F→:其實 bin 跟 Lib 都內含可以執行的 80x86 機器指令,但 bin08/04 21:38
4F→:只僅限於單一原始碼對應的, Lib 可以想成是由多個 bin 檔集08/04 21:40
5F→:合於一體的檔案,因為它內容眾多,所以稱之為 Library,它可以08/04 21:43
6F→:包含很多甚至無相關種類的函式庫在同一個 Lib 檔案內,以供08/04 21:44
7F→:軟體開發時利於呼叫使用,Windows 的 DLL 檔也有相同的功能,08/04 21:45
8F→:只不過它是屬於動態載入,只要有在程式需要使用時才載入,那08/04 21:46
9F→:跟一般的 Lib 檔相比, Lib 檔是在 Link 時以靜態連結的方式08/04 21:47
10F→:copy 一份副本到程式內,程式大小相對的較大一些了.08/04 21:48
6F→:執行緒的技術在雙核心出產以前就有了,作業系統會根據硬體特08/02 23:45
7F→:性搭配板驅動程式提供的功能決定你電腦的速度,其實是有方法08/02 23:48
8F→:強制系統利用多核心的方式執行程式, Visual C++ 2010 提供08/02 23:51
9F→:ppl.h 函式庫提供平行處理工具,它會自動處理平行執行模式.08/02 23:53
10F→:上述提供的方式使用之前必需先確定你的 CPU 有多核心功能.08/02 23:55
13F→:在 C 語言中呼叫系統中斷的方法是利用 intdos(), intdosx()07/31 22:54
14F→:int86(), int86x() 函式, 前 2 個只能呼叫 Dos 中斷,後者可07/31 22:55
15F→:呼叫 Dos 與 Bios, 在實體位址模式下這些函式都可以使用,但07/31 22:56
16F→:如果要在保護模式下使用,以 Windows 來說的話,必需要利用07/31 23:02
17F→:VxD 的技術來做,例如像是裝置驅動程式或者是系統核心程式才07/31 23:03
18F→:能完全使用系統全部的功能.07/31 23:05
1F→:請問你的 VB.Net 的 x.dll 檔有用到 .Net 物件嗎?07/28 01:00
2F→:如果有的話你的 Visual C++ 必需設定為使用 CLR 功能才能使07/28 01:04
3F→:用 .Net 物件喔...因為就算找到函式位址也無法呼叫.07/28 01:07
5F→:簡單說就是包含 .Net 程式無法跟純 CPU 指令碼程式一起使用07/28 18:39
9F→:LoadLibrary() 跟 GetProcAddress() 這 2 個函式是針對原生07/28 23:57
10F→:DLL 檔使用,所謂的原生就是指裡面包含的是 x86 指令集機器07/28 23:59
11F→:碼,它不需要有 .Net 虛擬機器就能交給 CPU 執行,但相對的07/29 00:00
12F→:使用 .Net 產生出來的任何執行檔包括 .DLL 檔它裡面並沒有07/29 00:04
13F→:機器指令,它跟 Java 一樣是屬於中介語言檔,它需要有虛擬機07/29 00:05
14F→:器轉換成真正的機器碼才能執行,當你執行原生 C++ 程式時系07/29 00:08
15F→:統並不會交給虛擬機器做解碼而是由 CPU 直接執行,因為 .Net07/29 00:13
16F→:包含太多的資料型態定義與函式庫需要做動態連結,因為直接跳07/29 00:17
17F→:過虛擬機器,作業系統就會找不到原生 C++ 程式要使用的 .Net07/29 00:20
18F→:資料型態與物件了.07/29 00:21
9F→:應該是說 a 本身可以當成指標來使用,所以 int *p = a + 1;07/28 01:30
10F→:那 *p == *(a + 1); 這個條件就會成立了07/28 01:31
2F→:Unmanaged C++ 與 C# 可以看成是 Dos 與 Windows 程式之間07/27 17:14
3F→:的關連性,Windows 程式無法在 Dos 下執行因為缺少 Windows07/27 17:16
4F→:支援,同樣的 C# 它本身也無法與純包含 CPU 指令碼的執行檔07/27 17:18
5F→:配合使用,因為檔案包含的內容完全不一樣,C# 其實就跟 Java07/27 17:20
6F→:一樣需要有虛擬機器的解碼才能轉換成 CPU 指令碼才能執行,07/27 17:21
7F→:要使用 C# 必需不能是 Unmanaged C++ 程式,而是要設定為07/27 17:23
8F→:Managed C++ 特性的程式才能與 C# 搭配使用.07/27 17:24