2012-08-11 17 views
13

Mi (relativamente antigua) compilador de C++ ahogada en this archivo en Boost, que comienza como:¿Boost utiliza la sintaxis de directivas de preprocesamiento de C++ legal?

# /* Copyright (C) 2001 
# * Housemarque Oy 
# * http://www.housemarque.com 
# * 
# * Distributed under the Boost Software License, Version 1.0. (See 
# * accompanying file LICENSE_1_0.txt or copy at 
# * http://www.boost.org/LICENSE_1_0.txt) 
# */ 
# 

Es esto realmente legal C++? ¿Cuál es la regla sobre la sintaxis de los tokens de preprocesador?

+0

¡Oh, no! ¡¡No me diga que usa Turbo C++ también !! –

+0

@CodyGray: Cielos, no! Era un viejo compilador de VC. – Mehrdad

+0

¿Qué versión, VC 4.0? Tengo curiosidad por qué no puedes actualizar – Viet

Respuesta

22

Sí, una línea que contiene sólo # y espacios en blanco se permite explícitamente por la norma §16 [CPP]:

de control de línea:
# include pp-tokens nueva línea
# define identificador replacement- una lista nueva línea
# define identificador lparen identificador lista opt) reemplazo lista nueva línea
# define identificador lparen ...) reemplazo-lista nueva línea
# define lparen identificador identificador de lista de , ...) reemplazo-lista nueva línea
# undef identificador de nueva línea
# line PP-tokens nueva línea
# error pp-tokens opt de nueva línea
# pragma pp-tokens opt nueva línea
# nueva línea

Tenga en cuenta que los comentarios son reemplazados por espacios en blanco en la fase de traducción 3, que está delante del preprocesador.

+1

+1. El último es todo lo que estaba buscando, y en realidad responde la pregunta: '# new-line'. – Nawaz

+3

@Nawaz: el OP pregunta "¿Cuál es la regla sobre la sintaxis de tokens de preprocesador?" Por lo que proporcionar algún contexto no hará daño. – ybungalobill

+0

@Nawaz: Haha eche un vistazo al historial de edición en mi publicación, fue divertido. :) – Mehrdad

Cuestiones relacionadas