2012-08-11 4 views
13

mia (relativamente vecchia) compilatore C++ soffocato sul this file in Boost, che inizia come:Boost utilizza la sintassi della direttiva di pre-elaborazione legale C++?

# /* 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) 
# */ 
# 

È questo C++ veramente legale? Qual è la regola sulla sintassi dei token del preprocessore?

+0

Oh no! Non dirmi che usi anche il Turbo C++ !! –

+0

@CodyGray: Cieli, no! Era un vecchio compilatore VC. – Mehrdad

+0

Quale versione, VC 4.0? Sono curioso perché non puoi aggiornare – Viet

risposta

22

Sì, una linea contenente solo # e gli spazi che è esplicitamente consentito dalla norma §16 [CPP]:

controllo-line:
# include pp-token nuova linea
# define identificatore replacement- elencare nuova linea
# define identificatore lparen identificatore-list opt) sostituzione-list nuova linea
# define identificatore lparen ...) sostituzione-list nuova linea
# define lparen identificatore identificatore-list , ...) sostituzione-list nuova linea
# undef identificatore nuova linea
# line pp-token nuova linea
# error pp-gettoni opt nuova linea PP-gettoni
# pragma opt nuova linea
# nuova linea

Nota che i commenti vengono sostituiti da spazi bianchi in fase di traduzione 3, che è davanti al preprocessore.

+1

+1. L'ultimo è tutto ciò che stavo cercando, e in realtà risponde alla domanda: '# new-line'. – Nawaz

+3

@Nawaz: l'OP chiede "Qual è la regola sulla sintassi dei token del preprocessore", quindi fornire un contesto non danneggerà. – ybungalobill

+0

@Nawaz: Haha dare un'occhiata alla cronologia delle modifiche sul mio post, è stato divertente. :) – Mehrdad

Problemi correlati