2009-09-09 11 views
5

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)

Odpowiedz

9

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ś.

+0

hmmmm, jak zrobić to globalne we wszystkich plikach? – akif

+2

#include "Global.h" w każdym pliku. – Goz

+0

zawierają plik nagłówkowy z # definicją w każdym pliku. Rozważ użycie prekompilowanego nagłówka ... – SadSido

1

To będzie zdefiniowana tylko w pliku, który go zdefiniować lub w plikach, które zawierają ten plik

3

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

define in msdn

2

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 ...

1

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".

1

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ą

2

#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.

1

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

Powiązane problemy