0
今天,我聽到一些C++程序員可以通過#define
關鍵字完成的惡魔事情。例如,忽略使用函數名稱定義宏的參數
#define private public
#define class struct
#define sizeof(x) (sizeof(x) - 1)
#define true (__LINE__ % 2)
#define pthread_mutex_lock(m) 0
我對function definition
感興趣。所以我試着通過它來測試它
CRITICAL_SECTION g_critSec;
#define InitializeCriticalSection(n, y) 0
void comparemutexwithcriticalsection() {
InitializeCriticalSection(&g_critSec);
std::cout << "Iterations: " << g_cRepeatCount << "\n\r";
// other codes...
}
它可以在VS2013下成功構建,這裏是反彙編代碼。
void comparemutexwithcriticalsection() {
00F9A710 push ebp
00F9A711 mov ebp,esp
00F9A713 sub esp,0CCh
00F9A719 push ebx
00F9A71A push esi
00F9A71B push edi
00F9A71C lea edi,[ebp-0CCh]
00F9A722 mov ecx,33h
00F9A727 mov eax,0CCCCCCCCh
00F9A72C rep stos dword ptr es:[edi]
InitializeCriticalSection(&g_critSec);
std::cout << "Iterations: " << g_cRepeatCount << "\n\r";
00F9A72E push 0FB66F4h
InitializeCriticalSection(&g_critSec);
看來參數#define
宏被忽略了,對嗎?
此基礎上,我嘗試define
我自己的功能0
#define myfunc(a) 0
void myfunc(int a)
{
cout << a << endl;
}
然而,它未能VS2013下編譯。 有人能幫我弄清楚在這裏失蹤的東西嗎?或者我的想法出錯了?
如果代碼中有'#定義InitializeCriticalSection(n,y)0',然後'InitializeCriticalSection(&g_critSec);'必須產生一個錯誤。如果您似乎獲得不同的結果,請發佈[MCVE](http://stackoverflow.com/help/mcve) –
這可能是某種MSVC「擴展」 –
@ M.M:又名「bug」 – rici