Kısa cevap: evet, standart kitaplık, belirli bir platformdan yararlanabilir (ve yapar).
Uzun yanıt: Kullanıcıya açık olan arabirim, platformlar arasında aynıdır, ancak uygulama, platform + derleyicisine özgü özelliklerden yararlanabilir.
Kanıt ister misiniz?
: C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \
Git dahil örneğin, en son görsel stüdyo (varsayılan olarak) burada, derleyici için dahil dizini bulun komut satırı ve bu dizin çalıştırın: benim makinede
findstr -s -n -i -l "<windows.h>" *
, bu çıkışlar:
delayhlp.cpp:25:#include <windows.h>
msclr\marshal.h:20:#include <windows.h>
msclr\marshal_windows.h:18:#include <windows.h>
vccorlib.h:34:#include <windows.h>
vsgcapture.h:4:#include <Windows.h>
Evet, windows.h çoklu uygulama dosyaları tarafından dahil edildi.yorumlara yanıt olarak
Düzenleme:
görsel stüdyoda dosyası "iplik" incelenmesi dizin std :: iplik uygulanmasını ortaya şunlardır :: katılmak geçerli:
inline void thread::join()
{ // join thread
if (!joinable())
_Throw_Cpp_error(_INVALID_ARGUMENT);
if (_Thr_is_null(_Thr))
_Throw_Cpp_error(_INVALID_ARGUMENT);
if (get_id() == _STD this_thread::get_id())
_Throw_Cpp_error(_RESOURCE_DEADLOCK_WOULD_OCCUR);
if (_Thrd_join(_Thr, 0) != _Thrd_success)
_Throw_Cpp_error(_NO_SUCH_PROCESS);
_Thr_set_null(_Thr);
}
Çeşitli _Thrd_XXX
işlevleri, C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\crt\src\stl
adresinde
cthread.c
işlevlerinde tanımlanmıştır. Örneğin 210
, _Thrd_join geçerli: WaitForSingleObjectEx
gibi çeşitli pencereler API işlevlerini kullanır
int _Thrd_join(_Thrd_t thr, int *code)
{ /* return exit code when thread terminates */
unsigned long res;
if (WaitForSingleObjectEx(thr._Hnd, INFINITE, FALSE) == WAIT_FAILED
|| GetExitCodeThread(thr._Hnd, &res) == 0)
return (_Thrd_error);
if (code)
*code = (int)res;
return (CloseHandle(thr._Hnd) == 0 ? _Thrd_error : _Thrd_success);
}
Yani öyle görünüyor ki "windows.h" standart kitaplığındaki başlıkların kullanıcılara görünmez olmasına rağmen, bu Bu fonksiyonların uygulanmasında kullanılır.
Uygulama dosyalarının (cthread.c gibi), aynı dizindeki "wrapwin.h" isimli bir dosya aracılığıyla "windows.h" içerdiğini ve dosyadaki yorumlara göre derleyici uyarılarının bastırıldığını unutmayın. "windows.h"
Standart kitaplığın derleyici/OS bağımlı olmasına izin verilir. Örneğin, genellikle derleyiciye özgü uzantılardan yararlanacaklardır. –
@RaymondChen Standart kütüphanenin Windows API'yi kullanmasına neden gerek duyduğunu düşünemiyorum. Başlık altında, kesinlikle Windows için uygulama, WinAPI kullandığı alanları için sadece C kullanabilir. Standart kütüphanede WinAPI veya hatta * nix libs için herhangi bir kullanım durumu düşünemiyorum. – oldjohn1994
@ Structure: Windows'ta C++ istisnaları, SEH istisnalarının üzerine modellenmiştir. Bunlar derleyici uzantıları ve CRT'nin bir karışımı kullanılarak uygulanır. Bu, ** nedenlerinden biri olan ** bir ** 'dir, neden C++ Standard Library'nin (veya CRT'nin) OS'ye özgü uygulamaları kullanması gerektiği. Tam olarak anlaşılmamış gibi görünüyorsunuz, CRT'nin Windows API'sının üstünde uygulanması. Başka yoldan değil. – IInspectable