Rozumiem, że C i C ++ są różnymi językami, ale kiedy uczyłem się C ++, zawsze mówiono mi, że C jest podzbiorem C ++ lub C ++ to C z klasami. I tak było do czasu pojawienia się C ++ x0, C ++ 11 (lub ogólnie C ++ 11/14/17). W rzeczywistości (szczególnie podczas pracy na systemach wbudowanych) bardzo prawdopodobne jest, że znajdzie kod napisany w C ++, ale z dużą ilością części napisanych całkowicie w czystym języku C. Tutaj mam kilka pytań:
- Czy powinienem przestać używać terminu C / C ++?
- Jeśli odpowiedź na pytanie nr 1 brzmi „tak”, jak miałbym wywołać program wykorzystujący mieszankę C i C ++?
- Biorąc pod uwagę, że oba są „różnymi” językami, jest prawdopodobne, że w pewnym momencie kompilatory C ++ przestaną obsługiwać kod napisany w języku C (ponieważ współczesne c ++ odbiega od mentalności C dla podstawowych rzeczy, takich jak wskaźniki, obsługa pamięci dynamicznej itp.)
- Czy istnieje obecnie jakakolwiek współpraca między ludźmi, którzy tworzą standardy C / C ++ w celu zachowania zgodności
- Jeśli nr 4 brzmi „tak”, taka współpraca może zakończyć się w najbliższej przyszłości wraz z pojawieniem się nowoczesnego c ++ (11/14/17)
Wiem, że są już podobne pytania, ale jestem pewien, że wiele osób dzieli się tymi pytaniami, więc jestem bardzo zainteresowany uzyskaniem dobrych odpowiedzi, szczególnie w kwestiach związanych z tendencją C ++ w najbliższej przyszłości.
c++
c
terminology
c++11
rkachach
źródło
źródło
Should I stop using the term C/C++
. Tak. Jest to używane tylko przez rekruterów i HR. Inżynierowie użyją tego terminuC
lubC++
jako niezależnych języków. Jeśli znajdziesz inżyniera, który łączy ten termin, unikaj go.Odpowiedzi:
C nigdy nie był podzbiorem C ++. Najbardziej oczywistym tego przykładem jest
int new;
. Było to prawdą od C89 i C ++ 98, a języki stały się od siebie coraz bardziej, gdy pojawiły się nowe standardy.tak
Plik źródłowy jest napisany w jednym lub drugim języku. Program może składać się z kodu z wielu języków współpracujących ze sobą lub pliku wykonywalnego utworzonego przez połączenie różnych skompilowanych obiektów. Można powiedzieć, że program został napisany w C i C ++, „C / C ++” nie jest językiem.
3) Nigdy tego nie zrobili.
char *a = malloc(10);
. C i C ++ nigdy nie były w pełni kompatybilne przynajmniej tak długo, jak miały standardy ISO (nie znam wszystkich szczegółów na temat dni wstępnie znormalizowanych). kliknij łącza lub zobacz poniżej plik, który jest w porządku z C89 i wyższym, ale nie jest prawidłowy w żadnym standardzie C ++.4) afaik nie, grupy robocze są sobie świadome, ale standardy podejmują decyzje, które są dla nich najlepsze.
Zawsze uważam, że warto wspomnieć, że C jest podzbiorem Objective-C.
źródło
javac
, ale o co w tym wszystkim chodzi?C/Fortran/sh
ma teraz sens ?! ioccc.org/years-spoiler.html#1986 .Tam ma być jakiś powód, dlaczego te terminy są ze sobą tak często. Chociaż nie powinieneś mówić nauczycielowi C, że jego język jest podzbiorem C ++, tutaj jest trochę prawdy. Inni już ujawnili punkt widzenia twojego nauczyciela. Jest to bardzo miłe (i zilustrowane przykładami itp.). Ale nie mieszkamy w wieży z kości słoniowej ani w książce.
Twój wielki szef nie przejmował się dokładnie tym, jakiego języka używałeś. Jeśli on wie trochę o programowaniu, po prostu powiedz mu, że używałeś C / C ++, a to zabrzmi jak „Użyłem języka, który musi zostać skompilowany do kodu maszynowego, z bibliotekami DLL i wszystkimi skomplikowanymi rzeczami”. Jest to część „komunikacji zewnętrznej”.
Jeśli utworzysz bibliotekę, która może być obsługiwana zarówno przez C, jak i C ++, zdecydowanie chcesz nazwać ją biblioteką C / C ++. Oczywiście, ktoś podniesie rękę i zapyta, dlaczego nie nazywacie tego biblioteką C, która akurat ma opakowanie C ++, a poza tym C ++ może łączyć się z bibliotekami C, więc nie trzeba o tym wspominać. Wystarczy odpowiedzieć: „Tak, masz rację, to jest biblioteka C / C ++”. Jest to część „komunikacji wewnętrznej”.
Jeśli utworzysz analizator leksykalny dla C ++, zdziwisz się, jak dobrze działa z C. Może nawet nie będziesz musiał go modyfikować. To jest „jeśli wygląda jak kaczka itp.” część.
Itp.
Większość programów C, jakie kiedykolwiek widziałem, kompiluje się (i działa) bez modyfikacji jako kod C ++. Nie pozwól, aby kilka wyjątków lub dogmatycznych (jakkolwiek wpływowych) programistów oszukało twoją intuicję. C i C ++ są tak blisko i tak często kompatybilne, i tak często mieszane i dopasowane razem, że używany jest termin C / C ++. Jest używany, ponieważ przydatne jest opisanie tego rodzaju sytuacji, w których tak naprawdę nie ma znaczenia, czy rozważasz C czy C ++, o ile nie jest to Java ani PHP . Wiemy, że to „źle”, ale nie obchodzi nas to, jest bardziej użyteczne niż złe.
Może być nadużywane, może być głupie, ale nadal nie jestem pewna, jakie korzyści odniesiesz, będąc bardziej pedantycznym niż potrzeba i odmówię komunikowania się w sposób zrozumiały dla innych. Jeśli czujesz się nieswojo w jakiejś konkretnej sytuacji, po prostu nie używaj ogólnego terminu C / C ++, ale odpowiedniego dla sprawy (C lub C ++).
Nie bój się przyszłości. Nasze systemy operacyjne są napisane w C. Dość duża część obecnej produkcji oprogramowania C / C ++ odbywa się w C ++. Ta para jest tu na dłużej. Nikt nie interesuje się tym, że jedno stanie się bardziej niezgodne z drugim (właściwie na odwrót).
Aby sprecyzować swoje punkty:
1) To zależy. Tak, gdy może to prowadzić do zamieszania, gdy czujesz się nieswojo, lub gdy jest to po prostu złe lub poza kontekstem. Nie, kiedy uważasz, że to wystarczające.
2) nie dotyczy
3) Myślę, że nie, ale nie mam kryształowej kuli.
4) nie ma pojęcia
5) Nie sądzę, ponieważ nic nie popycha w tym kierunku
źródło
C/C++
istotną ważnością tego terminu, nie jest jasne, a zatem nie jest przydatne. Zgodnie z twoimi przykładami, aC/C++ library
może oznaczać bibliotekę C z opakowaniem C ++ lub bibliotekę C ++ z opakowaniem C. Lub może to oznaczać, że biblioteka składa się z kilku modułów, niektóre skompilowane przy użyciu C ++, niektóre skompilowane w C. Nie jest to wcale jasne. Dla mnie stwierdzenie, że biblioteka jest utworzona,C and C++
jest o wiele bardziej przejrzyste lubC library with compatibility with C++
też o wiele bardziej przejrzyste. I tu dwuznaczność jest tylko z dwoma językami, wyobraź sobie, że używasz tej „strategii komunikacji”, aby uzyskać więcej ...Mówiąc przeciwnie, powiedziałbym, że zależy to od kontekstu .
Termin „C / C ++” zwykle nie jest odpowiedni, gdy mówi się coś w stylu „to jest program C / C ++”, ale zostało to zbadane dogłębnie w innych odpowiedziach.
Mogą jednak istnieć konteksty, w których C / C ++ może być odpowiedni.
źródło
or
, a nie logicznexor
. Więc jest to jedno lub oba. W ofertach pracy znasz C lub C ++ lub oba. Teraz czuję, że wielu ludzi jest religijnych na temat tego terminu. Dobry programista C będzie perfekcyjnie zbierając C ++ niezależnie od tego, jak różni oba języki. Zacząłem kodować PHP, a potem przeniosłem się na Scalę (dwa zupełnie różne języki). Dlaczego programista C nie byłby w stanie wybrać C ++ lub viceversa? Termin C / C ++ ma pewną wartość, jeśli jest używany w odpowiednim kontekście.Istnieje wiele subtelnych różnic między C i C ++. Na przykład w C ++
const
zmienna o zasięgu globalnym ma wewnętrzne powiązanie, chyba że zadeklarowaneextern
, ale w C ma zewnętrzne powiązanie, chyba że zadeklarowanestatic
. Mówiąc „C / C ++”, OP zapewnia wiedzę, że odpowiedź na ich pytanie jest taka sama zarówno w C, jak i C ++, kiedy może nie być. To niepotrzebnie utrudnia potencjalnym odbiorcom odpowiedzi.Czasami możemy zauważyć, że kod jest nieprawidłowy w jednym lub drugim języku (na przykład niejawne konwersje z
void*
na wskaźnik na obiekt nie są poprawne w C ++). To denerwujące. Dlaczego mówisz „C / C ++”, gdy masz fragment kodu, który jest poprawny w C, ale nie w C ++? Czy miałeś zamiar C, czy to tylko błąd w kodzie przeznaczonym do C ++?Czasami odpowiedź będzie inna w zależności od języka (na przykład tablice o zmiennej długości istnieją w C99, ale nie w C ++). Jeśli nie wiemy, o jakim języku mówisz, musimy zgadnąć lub napisać odpowiedź na oba, gdy tylko jeden będzie rzeczywiście przydatny, ponieważ wiesz, którego języka faktycznie używasz; po prostu nam nie mówisz!
Czasami odpowiedź jest naprawdę taka sama dla obu języków, ale trudno być pewnym. Na przykład uważam, że C i C ++ mają te same reguły konwersji liczb całkowitych, ale aby być naprawdę pewnym, muszę uważnie przeczytać oba standardy. Ponownie sprawia to, że wykonuję dwa razy więcej pracy, niż to konieczne, gdy zapewne zależy ci tylko na jednym z języków.
W każdym razie, aby odpowiedzieć na inne pytania:
Tak.
Jeśli łączysz ze sobą kod C i C ++, dopuszczalne jest użycie obu tagów, ale określ język, w którym znajduje się każdy plik.
Czasami zdarzają się przełomowe zmiany, ale są one rzadkie i zazwyczaj mają ograniczony wpływ (w przeciwnym razie nie zostaną zatwierdzone). Na przykład
auto
w C ++ 11.Nie sądzę, że współpracują bezpośrednio, ale zwracają uwagę na zmiany w innym języku i starają się unikać wprowadzania zmian, które utrudniają kompatybilność.
A jeśli naprawdę chcesz wiedzieć o obu językach, to w porządku i możesz to powiedzieć w swoim pytaniu. Kiedy mówisz „C / C ++”, tak naprawdę nie jestem pewien, co masz na myśli, i wygląda na to, że przyjmujesz założenie dotyczące dwóch języków.
źródło
struct class
na coś podobnegostruct klass
z tego właśnie powodu, i następnie zostaje niezmiennie zestrzelony przez Linusa.C nigdy nie był podzbiorem C ++. Na przykład C89 nie jest podzbiorem C ++ 98.
Kilka przykładów:
int
vsbool
)Tak.
Programem jest C lub C ++ (nawet jeśli jakiś bardzo prosty program można skompilować z kompilatorem C lub C ++). Jakiego kompilatora używasz do jego kompilacji? Powinien odpowiedzieć na twoje pytanie. Harbison i Steele wymyślili termin Clean C, aby określić wspólny podzbiór C i C ++, ale myślę, że to zły pomysł.
EDIT : Przyznaję jednak, że technicznie można połączyć pliki obiektów C i C ++ w jednym programie, ale OTH istnieje wiele języków, które mogą być mieszane w jednym programie, na przykład Java i C ++. Myślę, że użycie terminu program C / C ++ tylko zwiększa zamieszanie, że jest napisany w jednym języku o nazwie C / C ++.
Istnieje wiele funkcji (na przykład: tablica o zmiennej długości, elastyczny element tablicy
_Generic
, ...) C99 lub C11, które nie są obsługiwane przez żadną wersję C ++.źródło
Niektóre programy są napisane w kombinacji C i C ++
To tylko fakt z życia. Możesz skompilować pliki obiektowe z C i C ++ i połączyć je ze sobą. Wynik można całkiem rozsądnie nazwać „programem C / C ++”.
Ale to tylko program jako całość. Co z poszczególnymi jednostkami kompilacji?
Istnieje podzbiór C, który jest również podzbiorem C ++
Program (lub jednostka kompilacji) napisany w tym podzbiorze będzie się kompilował i zachowywał tak samo w zgodnych kompilatorach C i C ++. Taki program lub plik można słusznie nazwać „programem C / C ++” lub „plikiem C / C ++”.
Program częściowy, taki jak plik nagłówkowy, może być również używany zarówno w programach C, jak i C ++. Takie pliki nagłówków można słusznie nazwać nagłówkami C / C ++.
Cytując profesora Bjarne Stroustrup:
Więc tak istnieje coś takiego jak C / C ++. Jest to wszystko, co jest zarówno poprawnym C, jak i poprawnym C ++.
Preprocesor C jest częścią języka C. Preprocesor C ++ jest częścią języka C ++
Możesz napisać jednostkę kompilacji, która skompiluje się w C lub C ++ i będzie inna . Na przykład może mieć podstawową funkcjonalność skompilowaną w C, ale skorzystać z biblioteki C ++, jeśli jest skompilowana w C ++.
Jeśli program jest zasadniczo taki sam, ale z dodatkowymi funkcjami, nie jest błędem stwierdzenie, że jest to ten sam program. Jest taki sam, ale także inny.
Większość programistów C potrafi przynajmniej trochę C ++ i na odwrót
Nazwanie takiej osoby programistą C / C ++ nie jest nierozsądne. Tak, prawdopodobnie specjalizują się w jednym, ale czy jest ktoś, kto jest kompetentnym programistą C lub C ++, który dosłownie nie potrafi posługiwać się żadnym innym językiem? W pewnym sensie, czy nie wszyscy oni są programistami C / C ++?
Nie ma nic złego w powiedzeniu „C / C ++”. To, co się liczy, jest rozumiane
Język angielski nie jest narzędziem do wyrażania sylogizmów . Państwo może używać języka angielskiego dla logiki, ale dopiero, iz wielkim wysiłkiem.
Wynika to z tego, że słowa nie mają w naturalny sposób dokładnego znaczenia, ale raczej niejasną chmurę denotacji i konotacji. Liczy się to, że ludzie zrozumieją to, co mówisz.
źródło
Absolutnie. Nie jest jasne, co ten konstrukt ma wyrazić, z wyjątkiem być może niejasności co do C i C ++ w imieniu osoby, która używa tego terminu.
Ponieważ to zamieszanie jest tak powszechnym źródłem frustracji, wiele osób zaczęło się tym bardzo przejmować, a samo pojawienie się tego terminu będzie wystarczającym powodem do negatywnego wpływu na wasz wkład. To może wydawać się głupie, ale wydaje się, że to, co mamy.
Zalecam, aby zamiast mówić o „C / C ++” używać terminu, który faktycznie wyjaśnia, co masz na myśli.
Jeśli mówimy o czymś w C, które mogą lub nie mogą być prawdziwe dla C ++, wystarczy powiedzieć C .
Jeśli mówisz o czymś w C ++, co może, ale nie musi być prawdą dla C, po prostu powiedz C ++ .
Jeśli chcesz wskazać podobieństwo między C i C ++, powiedz C i C ++ .
Naprawdę zalecam, abyś był bardziej szczegółowy i nie mówił tylko o „C” lub „C ++”, ale o dokładnej wersji. Oba języki ewoluują, a tępe stwierdzenie, takie jak
nie jest ani dobre, ani złe.
Ponieważ języki się nakładają, każdy program w C będzie zawierał części, które mogą wyglądać jak C ++ i odwrotnie. Niemniej jednak autorzy prawdopodobnie zdecydują się na użycie kompilatora C lub C ++. Powiedzmy więc, że „program jest napisany w C ”, jeśli jest skompilowany z kompilatorem C, a „program jest napisany w C ++ ”, jeśli używają kompilatora C ++, nawet jeśli mogą odmówić użycia jakichkolwiek nowoczesnych funkcji C ++. Niektórzy ludzie odnoszą się do takiego kodu C ++ jako C-stylu C ++ . Brak przeładowania, wyjątki, polimorfizm, szablony i strumienie we / wy to wspólne cechy takiego kodu.
Jeżeli natomiast niektóre pliki są zapisywane w C i skompilowany z kompilatora C i niektóre inne pliki są napisane w języku C ++ i skompilowany z kompilatora C ++, a następnie pliki obiektów połączonych ze sobą, chciałbym powiedzieć, że „program jest napisany w mix C i C ++ ”, tak jak już to zrobiłeś.
Jeśli jednak autorzy dołożyli wszelkich starań, aby napisać każdy plik w taki sposób, aby można go było skompilować za pomocą kompilatora C lub C ++, a wynikowy program zrobiłby to samo, można powiedzieć, że „program jest napisany we wspólnym podzbiorze C i C ++ ”.
To drugie często dotyczy plików nagłówkowych, które powinny być współużytkowane przez kod C i C ++. Nawiasem mówiąc, pisanie takiego kodu nie jest łatwe. Jeśli chcesz dodatkowo podkreślić, że użyto tylko takich konstrukcji, które są poprawne w C i C ++ i są szeroko obsługiwane przez różnych dostawców kompilatorów, można użyć terminu przenośny wspólny podzbiór C i C ++ .
Nie jestem pewien, czy rozumiem to pytanie. Ponieważ C i C ++ są różnymi językami, nie można oczekiwać, że kompilator dla jednego z nich zaakceptuje program napisany dla drugiego. Jednak kompilatory są często projektowane w sposób modułowy i jeśli kompilator ma interfejs C ++ , są duże szanse, że będzie miał również interfejs C. (Następnie wybierasz, który z nich chcesz za pomocą przełącznika wiersza polecenia lub podobnych środków.) Tak długo, jak oba języki będą w powszechnym użyciu, wydaje się bardzo mało prawdopodobne, że to się zmieni. Twój punkt widzenia na temat „nowoczesnego C ++” myślę, że jest to w zasadzie kwestia dobrych standardów kodowania i standardowej biblioteki. Z punktu widzenia kompilatora ewolucja obu języków jest raczej zbieżna niż rozbieżna.
Tak. Model pamięci i biblioteka operacji atomowych wprowadzone w C ++ 11 i C11 są dobrym przykładem. Wygląda na to, że projektanci obu języków zdają sobie sprawę, że kompatybilność jest ważna i pracują nad jej ulepszeniem. Osobiście chciałbym, aby współpraca była bardziej intensywna, a dwie grupy robocze ISO mogły nawet dołączyć, ale moje życzenia nie są ważne.
Bjarne Stroustrup mówi o różnicach i podobieństwach między różnymi wersjami C i C ++ w § 44.3 czwartej edycji języka programowania C ++, który, jak na ironię, zatytułowany jest „Kompatybilność C / C ++”. W tym przypadku użycie tego terminu może być właściwe, ponieważ jest jasne, o co chodzi.
Jak omówiono powyżej, wydarzyło się to w C ++ 11 i oczekuje się / ma nadzieję / powinno się powtórzyć.
źródło
C / C ++ to skrzyżowanie C i C ++.
int new;
nie jest C / C ++ i nie jestvector<int> foo;
.Podobnie C89 / C99 to skrzyżowanie tych dwóch języków, w których żaden
enum bool { false, true };
lub niefor(int i = 0;;)
jest dozwolony.I C ++ 11 / C ++ 14 itd.
Możliwe jest pisanie kodu, który kompiluje (i poprawnie działa) w C ++ 11 i C ++ 14, nawet jeśli kompilacja pod jednym nie oznacza, że kompiluje się pod drugim. W rzeczywistości robi to wiele osób.
I wiele osób pisze kod, który działa w C i C ++.
Oczywiście im większe nakładanie się, tym bardziej sensowne; Nie oczekuję żadnych pytań dotyczących kodu C / C ++ / Java.
Chociaż „sensowne” jest mówienie o wspólnym podzbiorze tych języków, wiele pytań nie będzie zawierało odpowiedzi w tym podzbiorze, np. Co powinien zwrócić main () w C i C ++?
Ale możesz mówić o kodzie, który działa dla specyfikacji wielu języków, bez względu na to, czy specyfikacje te są rozróżniane według „wersji” lub „nazwy języka”, czy w inny sposób.
źródło
Jest to swego rodzaju odpowiedź na stanowisko, że „jest to kod dla programistów, którzy pracują blisko metalu i są OK w kontekście zarządzania”, co widać w innych odpowiedziach i komentarzach.
Twierdziłbym, że nawet przy takiej interpretacji należy zachować ostrożność.
Począwszy od połowy lat 90., jeśli chciałeś programisty C ++ i kogoś, kto opisał się jako programista C, musiałbyś zapytać, ile wiedzą o projektowaniu obiektowym, ile mają doświadczenia w debugowaniu obiektu zorientowany kontekst oraz ich zdolność do korzystania z bibliotek szablonów. Chcesz dokładnie zbadać te problemy podczas rozmowy kwalifikacyjnej i procesu rekrutacji.
Z drugiej strony minęło ponad dziesięć lat, odkąd guru C ++ zaczęli pchać „nowoczesne C ++”, co oznacza nacisk na odejście od odsłoniętych wskaźników do bezpieczniejszych obiektów wskaźnikowych i idiomów opartych na iteratorze. Wraz z pojawieniem się C ++ 11 istnieje teraz wyraźne wsparcie dla programowania z wieloma paradygmatami, a nacisk na kod, który nie wykazuje żadnych wyraźnych wskaźników, jest bardzo silny. Oznacza to, że gdybym dzisiaj przeprowadził wywiad z programistą C ++ na stanowisku C, bardzo martwi mnie sprawdzenie, czy ta osoba była zaznajomiona z rzeczywistymi wskazówkami umożliwiającymi strzelanie stopą.
Obecnie nie jestem w branży (nawet w takim stopniu, w jakim byłem wtedy, gdy Stack Overflow był w powijakach), więc nie odważę się zgadywać, jak często któryś z wyimaginowanych rozmówców nie miałby umiejętności przejścia, ale Myślę, że jak najczęściej stosowane języki są teraz bardzo różne.
Krótko mówiąc, „C / C ++” należy porzucić nie tylko w kontekstach technicznych, ale także w większości kontekstów biznesowych.
źródło
Najprostszą odpowiedzią na to pytanie jest to, że nigdy nie powinieneś używać tego terminu. Jest to termin, który nie powinien istnieć. To nie ma znaczenia. Każdy program to C lub C ++.
C ++ 98 i 03 nie są nawet zdalnie C w klasach. Ktokolwiek cię tego nauczył, nie zna gówna i możesz o nich zapomnieć. To nigdy nie było poprawne.
źródło
Koncepcyjnie, nie powinno być żadnych szczególnych trudności w projektowaniu plików źródłowych w języku C, aby można je było kompilować bez zmian w C ++. Rzeczywiście może to mieć pewne znaczące zalety. Na przykład podczas pisania kodu dla systemu osadzonego czasami pomocne jest przetestowanie kodu na hostowanym środowisku PC. Jeśli kod skompiluje się czysto jako C ++, możliwe jest wyrażenie takie jak „MOTOR_ENABLE = 1;” zapisz do lotnego bitu I / O we wbudowanym systemie (skompilowanym jako C), ale uruchom logikę emulacji na komputerze PC (kompilowanym jako C ++). Prawdopodobnie byłoby również możliwe zaprojektowanie na komputerze typu C ++, który zachowywałby się tak, jak uint16_t zachowuje się w mniejszych systemach wbudowanych (tak, że np. Biorąc pod uwagę
u16 x=65533;
, kompilator musiałby uwzględniać wartośćx*x
jako dziewięć, zamiast mieć swobodę panowania nad wszystkim, co chce), chociaż jak dotąd żaden z moich emulatorów tego nie uwzględnił [częściowo dlatego, że kompilatory C ++, których użyłem, nie zrobiły nic zwariowanego w takich przypadkach].Niestety, programiści C i programiści C ++ mają wystarczającą niechęć do siebie nawzajem, że języki przez lata ewoluowały w kompatybilny sposób. Podczas gdy C89 próbował dostosować niektóre bardziej użyteczne funkcje C ++ (takie jak prototypy funkcji), wydaje się, że pojawiła się postawa, że programiści, którzy chcą którejkolwiek z funkcji C ++, powinni używać C ++, ignorując fakt, że istnieje wiele sytuacji, w których być pomocnym, aby móc korzystać z niektórych funkcji C ++ (np. zdolność do przeciążania funkcji statycznym lub statycznym łączeniem wbudowanym bez konieczności ponoszenia kosztów związanych z innymi funkcjami, których się nie potrzebuje (np. zmiana nazwy związana z eksportem przeciążone funkcje).
Podczas gdy przecięcie C89 i C ++ 98 jest praktycznym językiem, użyteczny nadzbiór późniejszych wersji C z późniejszymi wersjami C ++ prawdopodobnie raczej się skurczył niż rozwinął (dzięki takim rzeczom, jak reguła ścisłego aliasowania), a trendy sprzyjają zawsze narastająca szczelina.
źródło
namespace
i zadeklarować drugie jakoextern "C"
, a następnie użyć kompilatora C ++.extern "C"
też są też inne komplikacje (np. Inicjalizacja obiektu statycznego itp.)? Czy jest jakiś sposób w C ++, aby uczynić go tak,foo(1234)
aby wywoływałfoo_const(1234)
makro, podczas gdyfoo(x)
[gdziex
nie jest stałą] wywołafoo_var(x)
funkcję? Istnieje wiele sytuacji, w których osadzone w kodzie może mieć sens dla „funkcja” LubięSET_PORT(port, state)
mieć trzy formy oparciu czy portu i państwo są zarówno ...