相关疑难解决方法(0)

用于删除C和C++注释的Python代码段

我正在寻找从代码中删除C和C++注释的Python代码.(假设字符串包含整个C源文件.)

我意识到我可以使用正则表达式匹配.match()子串,但这不能解决嵌套问题/*,或者//内部问题/* */.

理想情况下,我更喜欢一个能够正确处理尴尬案例的非天真实现.

c c++ python regex comments

41
推荐指数
5
解决办法
3万
查看次数

删除多行注释

如果它们以/*开头并以*结尾,我如何删除所有注释?我尝试了以下操作.它适用于一行评论.

sed '/\/\*/d' 
Run Code Online (Sandbox Code Playgroud)

但它不会删除多行注释.例如,不删除第二行和第三行.

/*!50500 PARTITION BY RANGE (TO_SECONDS(date_time ))
 PARTITION 20120102parti VALUES LESS THAN (63492681600),
(PARTITION 20120101parti VALUES LESS THAN (63492595200) */ ;
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我需要保留最后一个; 在结束评论标志后.

awk sed

8
推荐指数
3
解决办法
2万
查看次数

删除C程序中的所有注释 - 对此代码的任何可能的改进?

我正在从K&R书中学习C,在第一章中学习练习1.23,我必须编写一个程序,删除用户输入的一些C代码的所有注释.到目前为止,这是我完成的程序.我能做些什么改进吗?

/**
 Tuesday, 10/07/2013

 Exercise 1.23
 Write a program to remove all comments from a C 
 program. Don't forget to handle quoted strings 
 and character constants properly. C comments   
 don't nest.
**/

#include <stdio.h>
#define MAX_LENGTH 65536
#define NOT_IN_COMMENT 0
#define SINGLE_COMMENT 1
#define MULTI_COMMENT  2

main()
{
    char code[MAX_LENGTH];        /* Buffer that stores the inputted code */
    int size = 0;                 /* Length of the inputted code */
    int loop;                     /* Integer used for the for loop */
    char …
Run Code Online (Sandbox Code Playgroud)

c

5
推荐指数
1
解决办法
1万
查看次数

5
推荐指数
1
解决办法
2637
查看次数

将 C 文件导出到新文件时,删除 #if 0 和 #endif 之间的代码

我想删除toy.c文件中的所有评论。从从 C/C++ 代码中删除注释我看到我可以使用

gcc -E -fpreprocessed -P -dD toy.c
Run Code Online (Sandbox Code Playgroud)

但是我的一些代码(比如我不想编译的弃用函数)被包裹#if 0和之间endif,就好像它们被注释掉了一样

  • 一方面,上面的命令不会删除这种类型的“注释”,因为它只能在宏扩展期间删除,从而-fpreprocessed防止;
  • 另一方面,我还有其他不想扩展的宏,因此删除-fpreprocessed是一个坏主意。

我在这里看到了一个困境。有没有办法摆脱这种情况?谢谢。


以下玩具示例“toy.c”足以说明问题。

#define foo 3  /* this is a macro */

// a toy function
int main (void) {
  return foo;
  }

// this is deprecated
#if 0
int main (void) {
  printf("%d\n", foo);
  return 0;
  }
#endif
Run Code Online (Sandbox Code Playgroud)

gcc -E -fpreprocessed -P -dD toy.c

#define foo 3
int main (void) {
  return …
Run Code Online (Sandbox Code Playgroud)

c gcc text-processing comments c-preprocessor

5
推荐指数
1
解决办法
1944
查看次数

如何在源代码中查找搜索词

我正在寻找一种方法来搜索项目的C/C++代码中的给定术语,同时忽略注释和字符串中的任何出现.

由于代码库相当大,我正在寻找一种方法来自动识别与我的搜索词匹配的代码行,因为它们需要手动检查.

如果可能的话,我想在我的linux系统上执行搜索.

背景

所讨论的代码库是一个带有大量第三方插件的实时信号处理引擎.插件是用各种语言实现的(大多数是C语言,但也有C++和其他语言;目前我只关心这两种语言),没有强制执行任何标准.

我们的代码库目前使用内置类型float的浮点数,我们想用一个typedef允许我们使用双精度的代码.我们希望float在实际代码中找到所有出现的内容(忽略评论和打印输出中的合法用法).

更进一步的是,在代码有效负载中有一些(虽然很少)合法使用float(因此我们真的在寻找一种方法来识别所有需要手动检查的地方,而不是运行一些自动搜索和替换. )

代码还包含C样式的静态强制转换(float),因此依靠编译器警告来识别类型不匹配通常不是一种选择.

代码库由超过3000个(C和C++)文件组成,累积约750000行代码.

代码是跨平台的(linux,osx,w32是主要目标;但也是freebsd和类似的),并使用各种本机编译器(gcc/g ++,clang/clang ++,VisualStudio,...)进行编译.

至今...

到目前为止,我正在使用丑陋的东西:

 grep "\bfloat\b" | sed -e 's|//.*||' -e 's|"[^"]*"||g' | grep "\bfloat\b"
Run Code Online (Sandbox Code Playgroud)

但我认为必须有一些更好的方法来搜索有效载荷代码.

c c++ grep

3
推荐指数
1
解决办法
371
查看次数

标签 统计

c ×5

comments ×3

c++ ×2

awk ×1

c-preprocessor ×1

gcc ×1

grep ×1

python ×1

regex ×1

sed ×1

text-processing ×1

vim ×1