Jak używać dyrektywy __cplusplus?

0

Czytając symfonie c++ w rozdziale o preprocesorze natknąłem się na taką dykretywę __cplusplus. Z tego co zrozumiałem to podczas pisania programu w C++ można to wpisać i zamiast w c ++ ten fragment skompiluje w języku C. Tylko nie wiem jak tego używać ? Pomoże ktoś ? Dzięki.

2

Mówiąc obrazowo i niekoniecznie ściśle: Kod w C w większości przypadków może być traktowany/kompilowany jako C lub jako C++. Makro __cplusplus jest automatycznie zdefiniowane jeśli to się odbywa w trybie C++ (i nie jest dla trybu C).
Jeśli chcesz wiedzieć jaki tryb jest używany to możesz sprawdzić czy to makro jest zdefiniowane. Przydaje się jeśli np. zadowala Cię domyślne zachowanie kompilatora w trybie C, ale chcesz żeby trochę inaczej się zachował w trybie C++, np. nie dekorował nazw funkcji.

4

Chyba jedyne miejsce w którym to makro ma sens jest w pliku nagłówkowym, który ma być kompatybilny z C i z C++:

#pragma once
#ifdef __cplusplus
extern "C" {
#endif

// ... tutaj cała treść nagłówka

#ifdef __cplusplus
}
#endif

w ten sposób pod C++ wszystkie zmienne i funkcje będą opatrzone dyrektywą extern "C", która (upraszczając) włącza kompatybilność z C, a pod C te ifdefy z extern będą pominięte.

extern "C" oznacza (nadal w pewnym stopniu upraszczając) że importowana pod C++ funkcja została napisana w C, i w drugą stronę, że eksportowana funkcja napisana w C++ ma być widoczna i ma działać jeśli zostanie zaimportowana pod C.

a tak całkiem ściśle to extern "C" zmienia sposób „manglowania” nazw ze schematu przyjętego (pod daną platformą) dla C++ na ten przyjęty dla C.

samo __cplusplus nie robi nic i nadaje się tylko w połączeniu z ifdef/ifndef.

Na upartego można by zrobić coś takiego:

#ifdef __cplusplus

// kod dla C++

#else

// kod dla C

#endif

ale to raczej WTF ;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1