2010-10-24 5 views
-3

Несколько вопросов о препроцессора C++:несколько вопросов о C++ препроцессора:

  1. как сделать препроцессор перейти на новую строку в код preprocessoring?
  2. Как заставить препроцессор вставить символ табуляции или несколько пробелов в код предварительной обработки?
  3. Как сделать препроцессор вставлять комментарии в код предварительной обработки?
+0

· izzit домашнее задание? :) – Benoit

+0

Я не знаю, но я вижу там 3 вопроса. –

+8

Эти вопросы не имеют смысла. Например, почему вы хотите «вставить комментарии»? –

ответ

1

1) использовать обратную косую черту, так как Тим отметил

2) Я не думаю, что вы можете

3)

#define COMMENT /##/ this is a comment 
#define CPPCOMMENT(c) /##/ c 
#define CCOMMENT(c) /##* c *##/ 

COMMENT 
CPPCOMMENT(This is a c++ comment) 
CCOMMENT(This is a c comment) 

Редактировать

2 Предостережения

1) Не работает во всех компиляторах.

2) Не делайте этого, это глупо.

+0

Ваши макросы не работают в GCC 4.1.1. И, я думаю, в ряде других сред. – cHao

+0

В VS 2010 они только полуработы - макросы фактически становятся комментариями, но они преуменьшаются препроцессором. Таким образом, на самом деле ничего не вставлено, что побеждает цель всего этого злого беспорядка. Но по крайней мере макросы не приводят к ошибкам. – cHao

+0

@ cHao Тот факт, что он не работает в GCC, является проблемой GCC. В стандарте нет никаких оснований, которые говорят, что это не должно. Он работает в VS 2010, если вы устанавливаете флаг keep comments, это просто приводит к тому, что исходный файл является несовместимым, поскольку в нем все еще есть комментарии после предварительной обработки. Но если вы берете вывод препроцессора, то скомпилируйте его снова, он работает. Во-первых, я не вижу цели для всего этого злого беспорядка, поэтому я не знаю, как эта цель может быть побеждена. –

5

Что касается # 3, это ответственность препроцессора, чтобы удалить комментарии из кода, я не думаю, что это позволило оставить их. В любом случае это будет флаг, специфичную для C компилятор вам ++ повторное использование, поэтому вы должны указать свою среду.

2

Как заставить препроцессор перейти на новую строку в код предварительной обработки?

Почему?

Как заставить препроцессор вставить символ табуляции или несколько пробелов в код предварительной обработки?

Почему?

Как сделать препроцессор вставлять комментарии в код предварительной обработки?

Почему?

Препроцессор представляет собой процессор pre, который выполняется до преобразования кода в машинный код. Пробелы и комментарии, которые вы хотите добавить, не будут влиять на вывод приложения.

Если вы пытаетесь контролировать вывод gcc -E или что-то подобное, то вы лаете неправильное дерево.

+4

Это не ответ. Он принадлежит как комментарий. –

+1

@PigBen - Почему? Зачем? Зачем? –

2

Вы делаете это неправильно ... PREPROCESSOR не для этой цели.

+1

Для этой цели нет GRAMMAR –

+3

Сообщите об этом хозяину Yoda ... – IProblemFactory

4

Вопросы 2) и 3) не имеют большого смысла, как обрисовали другие люди.

Что касается вопроса 1, я предполагаю, что вы имеете в виду многострочные макросы, которые могут быть сделаны таким образом:

#define FOO line 1 \ 
    line 2 \ 
    line 3 \ 
    ...  \ 
    line n 

Обратите внимание на отсутствие \ в последней строке!

Смежные вопросы