Re: [問題] C的考題

看板C_and_CPP作者 (purpose)時間15年前 (2010/11/28 23:21), 編輯推噓12(12021)
留言33則, 18人參與, 最新討論串2/3 (看更多)
※ 引述《jcwilliam (william)》之銘言: : 話說原PO今天參加筆試,遇到一題,想請教版上各位先進 : : 遇到的問題: (題意請描述清楚) : 有一個 main method 如下: : int main(){ : cout<<"Hello Everyone!!"<<endl; : return 0; : } : 題目的問題是,如何在不更改main method 內容的前提下, : 使得輸出的畫面如下: : Hey, I am coming. : Hello Everyone!! : Good bye. : : 關於這題,小弟當時想破了頭也想不出該如何改寫? : 不知各位先進能否提供正確解答... : Thanks in advance. : : : 用 Windows 的 DLL 機制也可以做到 (其他作業系統怎麼用我不知道...) // filename: main.cpp // compile with: cl.exe main.cpp #include <iostream> using namespace std; #pragma comment(lib, "dll.lib") extern "C" { __declspec(dllimport) void foo(void); } void bar() { foo(); } int main() { cout<<"Hello Everyone!!"<<endl; return 0; } 分隔線分隔線分隔線分隔線分隔線分隔線分隔線分隔線分隔線分隔線 /* filename: dll.c compile with: cl.exe dll.c /LD Reference: http://msdn.microsoft.com/en-us/library/ms682583.aspx (DLLMain) */ #include <windows.h> #include <stdio.h> BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { if (fdwReason == DLL_PROCESS_ATTACH) { printf("Hey, I am coming.\n"); } else if (fdwReason == DLL_PROCESS_DETACH) { printf("Good bye.\n"); } return TRUE; } __declspec(dllexport) void foo(void) { printf("foo()..\n"); } 執行結果如下 D:\Desktop>main.exe Hey, I am coming. Hello Everyone!! Good bye. D:\Desktop> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.8.133.69

11/28 23:30, , 1F
我這樣也能算答案嗎http://nopaste.csie.org/6997b
11/28 23:30, 1F

11/28 23:33, , 2F
可以啊,s大沒寫,我都忘了還可以直接結束程式去解決
11/28 23:33, 2F

11/28 23:36, , 3F
沒仔細看還真沒發現一樓的梗 XDDD
11/28 23:36, 3F

11/28 23:40, , 4F
一樓的方法真酷
11/28 23:40, 4F

11/28 23:42, , 5F
如果在一開始做一個class~建構式跑第一行~解構式跑第三行
11/28 23:42, 5F

11/28 23:43, , 6F
然後一開始就宣告~這樣算不算啊XD
11/28 23:43, 6F

11/28 23:49, , 7F
OK,反正輸出一樣
11/28 23:49, 7F

11/28 23:49, , 8F
超酷的解 XD
11/28 23:49, 8F

11/29 00:02, , 9F
偷推我的 main 0.0 http://codepad.org/VincGmVc
11/29 00:02, 9F

11/29 00:11, , 10F
setstate 還真的都沒用過,用慣 printf 了
11/29 00:11, 10F
CRT 實作原理 (在調用 main() 之前先呼叫 _cinit 與 _initterm 函數) http://blog.csdn.net/peteryxk/archive/2005/01/31/275564.aspx ※ 編輯: purpose 來自: 124.8.133.69 (11/29 00:13)

11/29 00:19, , 11F
p 大這招太難了... Orz
11/29 00:19, 11F

11/29 00:20, , 12F
讓我聯想到以前玩 wargame 時用的 LD_PRELOAD
11/29 00:20, 12F

11/29 00:32, , 14F
上面是微軟的說明,感覺更清楚
11/29 00:32, 14F

11/29 00:37, , 15F
你把執行檔給我 echo "start";執行; echo "end" 這樣也行
11/29 00:37, 15F

11/29 00:38, , 16F
可是一樓的方法不是有改main了嗎?
11/29 00:38, 16F

11/29 00:39, , 17F
一樓的程式不改 main 也能跑,他測試的時候忘了刪
11/29 00:39, 17F

11/29 00:41, , 18F
soga
11/29 00:41, 18F

11/29 00:42, , 19F
他的 main 根本沒機會被呼叫阿 XD
11/29 00:42, 19F

11/29 01:11, , 20F
11/29 01:11, 20F

11/29 01:53, , 21F
樓上~我輸了~
11/29 01:53, 21F

11/29 02:30, , 22F
上面那個code... 比較像是腦筋急轉彎版本 XD
11/29 02:30, 22F

11/29 02:30, , 23F
gcc可以重寫exit,至於main之前能重寫什麼就不知了
11/29 02:30, 23F

11/29 03:21, , 24F
#define 的那個我有想到過, 不過後來想想還是別貼出來XD
11/29 03:21, 24F

11/29 11:21, , 25F
XD 酷喔
11/29 11:21, 25F

11/29 19:41, , 26F
11/29 19:41, 26F

11/29 20:02, , 27F
樓上超強!!
11/29 20:02, 27F

11/29 20:19, , 28F
樓樓上XDDDDDDDDDDDD
11/29 20:19, 28F

11/29 20:35, , 29F

11/29 20:48, , 30F
11/29 20:48, 30F

11/29 22:11, , 31F
11/29 22:11, 31F

12/01 15:41, , 32F
大推 michael 大,這個方法第一名真的XD
12/01 15:41, 32F

12/06 22:39, , 33F
michael大好聰明XDDDD 學習~
12/06 22:39, 33F
文章代碼(AID): #1CydEAd- (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
問題
5
11
完整討論串 (本文為第 2 之 3 篇):
問題
22
58
問題
5
11
文章代碼(AID): #1CydEAd- (C_and_CPP)