Скажем, кто-то действительно ленивый и не хочет помнить о необходимости вводить точки с запятой в конце строки, есть ли способ обойти это с помощью макросов?
Я не говорю, что это то, что я хочу сделать. Просто любопытно, если кто-нибудь попробовал это / если это возможно.
Что-то вроде: #define ‘\ n’ ‘; \ n’
Нет, макро идентификаторы могут быть только буквами, цифрами и подчеркиванием.
Кроме того, это приведет к множеству ненужных точек с запятой
if (cond)
stmt;
/* or */
if (cond)
{
stmts;
}
Был бы разрушен этим теоретическим макросом.
Если вы хотите заменить все символы новой строки точкой с запятой, за которой следует символ новой строки ( действительно плохая идея) вы можете сделать это с помощью Sed Line
sed -i "s/^\([^#].*[^\;{]\)$/\1;/" file.cpp
это добавит точку с запятой в конец любой строки:
#
{
Хотя это все еще не идеально. всегда будут ситуации, когда вы не хотите заканчивать точкой с запятой, это приведет к тому, что код не будет скомпилирован, хотя это лучше, чем if, являющийся пустым оператором, как указано выше.
int var = //like here
some_value;
func(arg1, arg2, // and here
arg3, arg4);
int func() // and here too
{
//body
}
Вам не нужно автоматически ставить точку с запятой в конце каждой строки.
Не будет способа написать макрос препроцессора C, который заменяет символы новой строки на точки с запятой, потому что имена макросов C должны быть идентификаторами — последовательность буквенно-цифровых символов (плюс подчеркивание), начинающаяся с нецифрового символа.
Вы должны сделать:
#define SC ;
int x = 0 SC
что хуже, чем проблема, которую вы пытаетесь решить.