Практически никогда не стоит возиться с регулярными выражениями в синтаксисе любого языка. Он очень хрупок и может закончиться хаосом по малейшей причине, такой как закомментированная строка #ifdef
. Исправление глючного парсера другим потенциально глючным парсером — это… как минимум странно.
Если вы поняли проблему, вы можете продолжить чтение.
В некоторых случаях это может помочь удалить весь блок #ifdef
(, кстати, вы уверены, что хотите рассматривать его как не определенный?):
sed '/ enum /,/}/!b
/#ifdef/!b
:loop
N
/#endif/!bloop
d' file.h
Пояснение:
/ enum /,/}/!b
оставить все строки вне диапазонаenum
-}
-нетронутыми /#ifdef/!b
также оставьте все внутри нетронутым, пока#ifdef
:loop
да, как только мы встретили #ifdef
, нам нужно зациклиться N
Теперь начинаем дописывать строки... /#endif/!bloop
пока не нашли#endif
d
удалите все, что мы собрали между #ifdef
и #endif
мы собрали Вы пытаетесь скомпилировать это как программу на C++ ("ISO C++ запрещает..." ). Таким образом, вы получаете всевозможные предупреждения, потому что включены заголовки C, а не C++.
Либо переименуйте main.cpp
в main.c
, чтобы она скомпилировалась как программа на C, либо используйте правильный способ C++ для включения заголовков C -в extern "C"
, а затем используйте g++
и сделайте Убедитесь, что ваш собственный код соответствует стандарту C++.