Можно ли сделать макрос, который заменяет символы новой строки на точки с запятой

Скажем, кто-то действительно ленивый и не хочет помнить о необходимости вводить точки с запятой в конце строки, есть ли способ обойти это с помощью макросов?

Я не говорю, что это то, что я хочу сделать. Просто любопытно, если кто-нибудь попробовал это / если это возможно.

Что-то вроде: #define ‘\ n’ ‘; \ n’

1

Решение

Нет, макро идентификаторы могут быть только буквами, цифрами и подчеркиванием.

Кроме того, это приведет к множеству ненужных точек с запятой

if (cond)
stmt;
/* or */
if (cond)
{
stmts;
}

Был бы разрушен этим теоретическим макросом.

Если вы хотите заменить все символы новой строки точкой с запятой, за которой следует символ новой строки ( действительно плохая идея) вы можете сделать это с помощью Sed Line

sed -i "s/^\([^#].*[^\;{]\)$/\1;/" file.cpp

это добавит точку с запятой в конец любой строки:

  1. Еще не заканчивается точкой с запятой
  2. Не начиная с #
  3. Не заканчивается {

Хотя это все еще не идеально. всегда будут ситуации, когда вы не хотите заканчивать точкой с запятой, это приведет к тому, что код не будет скомпилирован, хотя это лучше, чем if, являющийся пустым оператором, как указано выше.

int var = //like here
some_value;

func(arg1, arg2, // and here
arg3, arg4);

int func()  // and here too
{
//body
}
2

Другие решения

Вам не нужно автоматически ставить точку с запятой в конце каждой строки.

Не будет способа написать макрос препроцессора C, который заменяет символы новой строки на точки с запятой, потому что имена макросов C должны быть идентификаторами — последовательность буквенно-цифровых символов (плюс подчеркивание), начинающаяся с нецифрового символа.

Вы должны сделать:

#define SC ;

int x = 0 SC

что хуже, чем проблема, которую вы пытаетесь решить.

0

По вопросам рекламы [email protected]