C++ 2003, Załącznik B (informacyjny) ilości wdrożeniowe (przepraszam, nie mam C++ 2011 poręczny)
2) Limity mogą ograniczać ilości, które obejmują te opisane poniżej lub innych. Numer w nawiasie numer jeden po każdej ilości jest zalecany jako minimalny dla tej ilości. Jednak te ilości są tylko wytycznymi i nie określają zgodności.
...
- znaków w jednej linii kodu logicznego [65 536].
Nie pytałem o nich, ale mogą one być przydatne również:
- poziomy zagnieżdżenia wyrażeń w nawiasach w pełnej ekspresji [256].
- Identyfikatory makr jednocześnie zdefiniowane w jednej jednostce tłumaczeniowej [65 536].
- Argumenty w jednym wywołaniu makra [256].
- Liczba znaków w wewnętrznym identyfikatorze lub nazwie makra [1 024].
- Identyfikatory makr jednocześnie zdefiniowane w jednej jednostce tłumaczeniowej [65 536].
- Parametry w jednej definicji makra [256].
Postscript: Warto zauważyć, co "jedna linia źródło logiczne" jest. Linia
logiczne źródło jest to, co masz
po:
- znaków pliku źródłowego fizyczne są przypisane do podstawowego źródła charakterze ustawić
- Trigraph sekwencje (2.3) są zastępowane przez odpowiednie reprezentacje wewnętrzne pojedynczych znaków
- Każde wystąpienie znaku nowej linii i bezpośrednio poprzedzający backslash charakter usuniętych
linię w źródle logiczne jest to, co masz przed:
- plik źródłowy rozkłada się tokenów preprocesora
- Preprocessing d irectives są wykonywane, a inwokacje makr są rozszerzane.
[cytaty z C++ 2003, 2,1 Fazy Translation]
Tak więc, jeśli problemem PO jest, że makra rozwijają się poza rozsądną długość linii, moja odpowiedź jest bez znaczenia. Jeśli obawa PO polega na tym, że jego kod źródłowy (po zaadaptowaniu się do \
, \n
) może być zbyt długi, moja odpowiedź jest ważna.
Chciałbym raczej sprawdzić, czy istnieje sposób uniknięcia preprocessor voodoo. Jest to bardziej prawdopodobne niż zależne od szczegółów implementacji. –
Nie sądzę, że trudno byłoby kompilatorowi C++ zaakceptować nieskończoną długość linii, ale nigdy go nie napisałem. –
@stefanbachert: Nie mogę tego uniknąć, to jest problem. Chodzi również o to, aby wiedzieć, gdzie zaczyna się ziemia określona na etapie wdrażania, aby uniknąć błądzenia w niej. – Fanael