Wiem, że są one wyjątkowo niebezpiecznie implementowane w C / C ++. Czy nie można ich wdrożyć w bezpieczniejszy sposób? Czy wady makr są na tyle poważne, że przewyższają ich ogromną
Makra są używane do udostępniania sekwencji instrukcji obliczeniowych programiście jako pojedynczej instrukcji programu, dzięki czemu zadanie programistyczne jest mniej żmudne i podatne na błędy. [
Wiem, że są one wyjątkowo niebezpiecznie implementowane w C / C ++. Czy nie można ich wdrożyć w bezpieczniejszy sposób? Czy wady makr są na tyle poważne, że przewyższają ich ogromną
Preprocesor C jest dołączony do C, ale ma zupełnie inną składnię niż język główny: znaczące spoczynkowo białe znaki (koniec linii kończy instrukcję, przerwa po tym, jak makro określa początek listy zastępczej) bloki oparte na słowach kluczowych zamiast wzmocnionych bloków elifzamiastelse...
Z różnych porównań szablonów C ++ i generycznych C # / Java takich jak ten - /programming/31693/what-are-the-differences-between-generics-in-c-and-java-and-templates-in-c/31929#31929 Mam wrażenie, że szablony C ++ są implementowane przez pewnego rodzaju przetwarzanie wstępne (zamiana zwykłego...
Common Lisp pozwala pisać makra, które wykonują dowolną transformację źródłową. Schemat zapewnia higieniczny system dopasowywania wzorów, który pozwala również przeprowadzać transformacje. Jak przydatne są makra w praktyce? Paul Graham powiedział w Beating the Averages, że: Kod źródłowy...
Uczę się Scheme z SICP i mam wrażenie, że duża część tego, co czyni Scheme, a tym bardziej LISP, jest systemem makro. Ale skoro makra są rozszerzane w czasie kompilacji, dlaczego ludzie nie tworzą równoważnych systemów makr dla C / Python / Java / cokolwiek? Na przykład można powiązać...
Czytam „Standardową bibliotekę C” PJ Plaugera, co jest naprawdę interesujące. Książka wyjaśnia nie tylko, jak KORZYSTAĆ z biblioteki, ale także sposób jej implementacji. Skończyłem czytać ctype.hsekcję, aw nagłówku funkcje są zadeklarowane zarówno jako makra ORAZ funkcje. Na przykład int...
W obecnej formie to pytanie nie pasuje do naszego formatu pytań i odpowiedzi. Oczekujemy, że odpowiedzi poparte będą faktami, referencjami lub wiedzą specjalistyczną, ale to pytanie prawdopodobnie będzie wymagało debaty, argumentów, ankiet lub rozszerzonej dyskusji. Jeśli uważasz,...
Próbuję nauczyć się trochę LISP i dużo czytałem o znaczeniu makr LISP, więc chciałbym zdobyć trochę doświadczenia w pracy z nimi. Czy możesz zasugerować praktyczny obszar zastosowania, który pozwoliłby mi użyć makr do rozwiązania rzeczywistego problemu i zrozumienia przydatności tego konstruktu...
Patrząc na dekoratorów Pythona, ktoś stwierdził, że są tak potężni jak makra Lisp (szczególnie Clojure). Patrząc na przykłady podane w PEP 318 , wydaje mi się, że są one po prostu fantazyjnym sposobem użycia zwykłych starych funkcji wyższego rzędu w Lisp: def attrs(**kwds): def decorate(f): for...
Powiedzmy, że chcę mieć w kodzie kilka typów komunikatów wyjściowych. Jednym z nich jest DEBUG, który jest drukowany tylko wtedy, gdy kod jest kompilowany w trybie debugowania. Zwykle musiałbym napisać coś takiego #ifdef DEBUG std::cout << "Debug message" << std::endl; #endif co...
Czytałem o bibliotekach napisanych przez ludzi dla języków takich jak Java i C #, które wykorzystują tkanie kodu bajtowego do robienia rzeczy takich jak przechwytywanie wywołań funkcji, wstawianie kodu rejestrującego itp. Czytałem również o makrach Lisp / Clojure w spróbuj lepiej zrozumieć, jak z...
Słyszałem, że makra Clojure są łatwiejsze do pisania, ale nie tak niezawodne jak makra higieniczne Racket. Moje pytanie składa się z 2 części: Czym gensymróżnią się od makr higienicznych? Co zapewniają makra Racket, których nie ma Clojure? (czy to bezpieczeństwo, kompozycja, czy cokolwiek...