有没有一种简单的方法可以从C/C++源文件中删除注释而无需进行任何预处理.(也就是说,我认为你可以使用gcc -E,但这会扩展宏.)我只想要删除注释的源代码,不应该改变任何其他内容.
编辑:
对现有工具的偏好.我不想用正则表达式自己写这个,我预见代码中有太多的惊喜.
我想要的不是标准的C预处理器,而是可以从某个地方接受的变体 - 可能是命令行通过-DNAME1和-UNAME2选项 - 定义了哪些宏的规范,然后消除了死码.
通过一些例子可能更容易理解我所追求的内容:
#ifdef NAME1
#define ALBUQUERQUE "ambidextrous"
#else
#define PHANTASMAGORIA "ghostly"
#endif
Run Code Online (Sandbox Code Playgroud)
如果命令是使用'-DNAME1'运行的,则输出将为:
#define ALBUQUERQUE "ambidextrous"
Run Code Online (Sandbox Code Playgroud)
如果命令是使用'-UNAME1'运行的,则输出将为:
#define PHANTASMAGORIA "ghostly"
Run Code Online (Sandbox Code Playgroud)
如果命令是在没有选项的情况下运行的,则输出将与输入相同.
这是一个简单的例子 - 我希望代码也可以处理更复杂的情况.
用现实世界但仍然简单的例子来说明:
#ifdef USE_VOID
#ifdef PLATFORM1
#define VOID void
#else
#undef VOID
typedef void VOID;
#endif /* PLATFORM1 */
typedef void * VOIDPTR;
#else
typedef mint VOID;
typedef char * VOIDPTR;
#endif /* USE_VOID */
Run Code Online (Sandbox Code Playgroud)
我想运行命令-DUSE_VOID -UPLATFORM1并获取输出:
#undef VOID
typedef void VOID;
typedef void * VOIDPTR;
Run Code Online (Sandbox Code Playgroud)
另一个例子:
#ifndef DOUBLEPAD
#if …Run Code Online (Sandbox Code Playgroud) 反向工程代码,我对这种风格感到震惊,但我想确保没有充分理由做这些事情....
它只是我还是一种可怕的编码风格
if ( pwbuf ) sprintf(username,"%s",pwbuf->pw_name);
else sprintf(username,"%d",user_id);
Run Code Online (Sandbox Code Playgroud)
为什么包装代码不打算用于编译
#if 0
....
#endif
Run Code Online (Sandbox Code Playgroud)
而不是评论?
编辑:正如下面的一些解释,这是由于flummox/**/的可能性,我没有意识到.
但我仍然不明白,为什么不使用你的编程环境工具或喜欢的文本编辑器的宏来阻止使用"//"注释掉它
难道这不会更直接,更容易知道在视觉上跳过?
我只是缺乏C经验并且错过了为什么这些东西可能是一个好主意 - 或者没有任何借口,我有理由对这段代码的丑陋感到恼火?