Nie znam Objective-C, więc moja odpowiedź będzie dotyczyła kontrastowania użycia preprocessora w C i C++.
Preprocesor był pierwotnie konieczny dla C z kilku powodów. Jeśli dobrze pamiętam, pierwotnie C nie miał stałych, więC# defikta było potrzebne, aby uniknąć magicznych liczb. Przed 1999 rokiem C nie miał wbudowanych funkcji, więc ponownie #define został użyty do stworzenia makr lub "pseudo-funkcji", aby zaoszczędzić na obciążeniu wywołania funkcji, przy zachowaniu struktury kodu. C również nie ma polimorfizmu czasu wykonywania lub kompilacji, więC#ifdefs były potrzebne do kompilacji warunkowej. Kompilatory zazwyczaj nie były wystarczająco inteligentne, aby zoptymalizować nieosiągalny kod, więc ponownie użyto #ifdefs do wstawienia kodu diagnostycznego lub debugowania.
Użycie preprocesora w C++ jest powrotem do C i generalnie jest marszczone. Funkcje językowe, takie jak stałe, funkcje wbudowane i szablony, mogą być używane w większości sytuacji, w których w C użyłbyś preprocesora.
Nieliczne przypadki, w których użycie preprocesora w C++ jest dopuszczalne, a nawet konieczne, obejmują osłony plików nagłówkowych, aby zapobiec wielokrotnemu dołączaniu tego samego nagłówka, #ifdef __cplusplus
, aby użyć tego samego nagłówka dla obu nagłówków i C++, __FILE__ i __LINE__ do logowania oraz kilka innych.
Preprocesor jest często używany również w definicjach specyficznych dla platformy, chociaż Stephen Dewhurst zaleca, aby C++ Gotchas mieć oddzielne katalogi włączające dla definicji specyficznych dla platformy i używać ich w osobnych konfiguracjach kompilacji dla każdej platformy.
Dowiedzieliśmy się od C. Z C/C++/Objective-C, otrzymali kompilator języka C, a następnie zbudowali go na górze, ponieważ było to łatwiejsze. Nowsze języki zostały po prostu lepiej zaprojektowane od podstaw. Większość osób, które znam z przeszłością w tle, jest przerażonych przedprocesorami. Nie nadaje się do prędkości, wkręca swój projekt, szkodzi zrozumieniu. Żadna przewaga, z wyjątkiem tego, że pozwala ci napisać gorszy kod - dlaczego ktoś miałby to celowo skopiować? –
Zobacz http://stackoverflow.com/questions/652788/what-is-the-worst-real-world-macros-pre-processor-abuse-youve-ever-come-rossross i http: //blogs.msdn. com/oldnewthing/archive/2005/01/06/347666.aspx :) –
Mam kilka programów dsp C++, w których liczy się każdy cykl (tak, naprawdę). Preprocesor pomaga mi sporo podczas optymalizacji. Nie używam go do niczego innego. Kocham to. Nie mógłbyś tego wyciągnąć z moich rąk. Czy w tych dynamicznych językach wykonałeś wiele programów dsp w czasie rzeczywistym? Pamiętaj, że bez względu na to, ile rodzajów programowania wykonałeś, właśnie podrapałeś powierzchnie tego rodzaju programowania, które można zrobić. – Nosredna