Muszę wiedzieć, że czy dyrektywa #define w C++ deklaruje globalną etykietę? Przez globalny mam na myśli widoczny w każdym pliku?C++ # preprocesor predefiniowany
Używam Visual Studio 2008, (odgadnąć, czy to ma znaczenie)
Muszę wiedzieć, że czy dyrektywa #define w C++ deklaruje globalną etykietę? Przez globalny mam na myśli widoczny w każdym pliku?C++ # preprocesor predefiniowany
Używam Visual Studio 2008, (odgadnąć, czy to ma znaczenie)
Nie, tylko w bieżącej jednostce tłumaczeniowej.
tj. każdy plik, który ma #define
, lub zawiera plik, który ma #define
, zobaczy definicję.
Edytuj, aby odpowiedzieć na Twój komentarz: aby uzyskać definicję w każdym pliku, umieść go w nagłówku, który zostanie dołączony wszędzie, lub użyj opcji kompilatora, aby uzyskać dodane definicje.
np. w przypadku gcc można wykonać:
gcc -Dthedefine=itsvalue
Nie wiem, w jaki sposób jeden określa takie obejmuje w VC++, ale jestem pewien, że jest to możliwe jakoś.
To będzie zdefiniowana tylko w pliku, który go zdefiniować lub w plikach, które zawierają ten plik
dyrektywy #define substytuty token-ciąg dla wszystkich kolejnych wystąpień identyfikator w Plik źródłowy. Identyfikator jest zastępowany tylko wtedy, gdy tworzy token. (Zobacz token C++ w języku C++ Reference.) Na przykład identyfikator nie zostanie zastąpiony, jeśli pojawi się w komentarzu , w ciągu znaków lub jako część dłuższego identyfikatora.
To nie jest globalna, to tylko dla bieżącego pliku/źródło
symbolem, zdefiniowaną przez „#define” jest widoczny z miejsca dyrektywy do końca tłumaczenia jednostka (lub do najbliższego "#undef" tego symbolu). Na przykład, jeśli zdefiniujesz coś w pliku "file.h", ten symbol jest widoczny w "file.h" i w każdym pliku, który zawiera "file.h", bezpośrednio lub pośrednio ...
Bez względu na makro zdefiniowałeś w jednym pliku będzie widoczny tylko w innym pliku, jeśli zawarłeś plik z tym makro, więc nie jest on automatycznie globalny. Zasadniczo z tego powodu w plikach nagłówkowych należy zdefiniować makra, tak aby można było zrobić #include "headerFile.h".
Dyrektywa będzie określać od tego momentu, aż kompilacja się zakończy - należy pamiętać, że każdy plik .cpp jest traktowany jako oddzielna jednostka kompilacji.
Aby zdefiniować coś w plikach źródłowych, to musi być w pliku nagłówka, że wszystkie pliki źródłowe obejmują
#define
działa tylko w jednostce tłumaczeniowej jest zdefiniowana w. W nagłówku plików współużytkowane przez jednostki tłumaczeniowe, które mogłyby być wieloma plikami.
Jednak, aby było naprawdę globalne, potrzebujesz rozszerzenia Visual Studio. Opcja wiersza polecenia/D pozwala przekazać procesorowi odpowiednik #define
s, który można umieścić na stronie właściwości projektu.To prawie "tak globalne, jak to tylko możliwe"; w przypadku rozwiązań wieloprojektowych można używać współdzielonych dziedziczonych arkuszy właściwości projektu.
Można również ustawić arkusz właściwości studyjnej wizualnej, który jest poparty plikiem .vsprops i przypisać go do odpowiednich projektów w swoim rozwiązaniu.
Umożliwi to łatwe zarządzanie typowymi ustawieniami wielu typów w wielu projektach, nawet jeśli znajdują się one w osobnych plikach rozwiązań.
http://msdn.microsoft.com/en-us/library/a4xbdz1e%28VS.80%29.aspx
hmmmm, jak zrobić to globalne we wszystkich plikach? – akif
#include "Global.h" w każdym pliku. – Goz
zawierają plik nagłówkowy z # definicją w każdym pliku. Rozważ użycie prekompilowanego nagłówka ... – SadSido