Tag: 重构

来自带有预处理程序指令的c代码的AST

如何从gcc C代码构建AST(抽象语法树)以进行一些转换,如下所示,然后再将代码重新生成(生成)到C语法? if(condition_1){ //lines of code 1 } #ifdef expression_1 else if(condition_2){ //lines of code 2 } #endif 成 bool test = condition_1; if(teste){ //lines of code 1 } #ifdef expression_1 if(!(test) && condition_2){ //lines of code 2 } #endif

代码目录结构 – 库设计

下面是代码结构,其中stack , Queue , tree文件夹代码依赖于list文件夹代码, ../Computing >ls HashTable list Queue recursion stack tree list tree/rootedTree文件夹中复制的list文件夹,不像推荐的方法包含依赖的头文件, 这里提到的, ../Computing/tree/rootedTree >ls lcrsImpl.c list main.c multiWalkImpl.c tree.h 这是rootedTree文件夹的不完整代码。 为避免代码重复List文件夹,如何维护代码结构?

重构重复的保护声明

我已经定义了一种计算获胜几率的方法,并返回支付给玩家的金额。 我最初写这是完成此任务最明显的方式,但我真的想知道重构这个的最佳方法,以最大限度地减少计算机的工作量。 这是我的function: int getPay(int winningOdds, int payOut) { winningOdds = rand() % MAXIMUM_ODDS + MINIMUM_ODDS; if(winningOdds == 1) { payOut = 4000; printf(“Jackpot! – %d\n”, payOut); } else if(winningOdds <= 2) { payOut = 1000; printf("Coins won – %d\n", payOut); } else if(winningOdds <= 3) { payOut = 500; printf("Coins won – %d\n", payOut); […]

替换function或由文本本身定义

如何更换所有出现的 check_free_set_to_null(&pointer) 通过 if (pointer) { free(pointer) printf(pointer have been freed) } else { printf(pointer couldnt had been freed) return (1) } 也许使用某种方式 {1} = check_free_set_to_null(内容) if ({1}) { free({1}) printf({1} have been freed) } else { printf({1} couldnt had been freed) return (1) } 我怎么能这样做? (请注意,它不完全是必须替换的,它只是一个例子)我不是在寻找编译器将其解释为多行,我正在寻找修改文件。

尝试一起编译多个CUDA文件时链接错误LNK2005

我有一个工作正常的CUDA程序,但目前所有程序都写在一个文件中。 我想将这个大文件拆分成几个较小的文件,以便更容易维护和导航。 新结构是: foo.cuh foo.cu bar.cuh bar.cu main.cu .cuh头文件包含结构和函数原型, .cu文件包含函数定义(像往常一样)。 主文件包括bar.cuh , bar.cu包括foo.cuh 。 所有.cu文件都包含cutil_inline.h,以便能够使用CUDA函数。 因此: // main.cu #include “bar.cuh” #include int main() […] // bar.cu #include “bar.cuh” #include “foo.cuh” #include […] // foo.cu #include “foo.cuh” #include […] 问题是当我用这个新结构编译我的Visual Studio 2008项目时,我遇到了大量的链接错误: error LNK2005: “void __cdecl __cutilBankChecker(unsigned int,unsigned int,unsigned int,unsigned int,unsigned int,unsigned int,char *,int,char *,int)” (?__cutilBankChecker@@YAXIIIIIIPADH0H@Z) […]

从cscope数据库生成调用树

我想从Linux的c和c ++项目的cscope数据库生成完整和部分调用树。 项目相当大,因此使用项目的完整调用树并不容易,所以我想用函数名的grep-likefilter来限制调用树的生成。 而且我希望能够从任何一点构建“被叫”和“被叫”子树。 因此,工具必须是交互式的,并且易于修补。 PS:我想使用cscope数据库,因为它已经在项目中使用并且生成它相当快。 我使用vim编辑器并拥有X windows系统。 sourceforge上有cbrowser程序,但它的call-tree(callgraph)function被破坏了。

在Vim中重构C / C ++(例如Eclipse中的方法提取)

Vim中是否有任何插件或内置方法可以对C或C ++代码进行重构,比如Eclipse中的重构工具? 我特别热衷于Eclipse中的提取方法重构工具,它将从新方法中确定参数,并且通常还会猜测要用作返回值的变量。

如何在代码中同时交换或替换多个字符串?

给出以下代码示例: uint8_t i, in, ni; i = in = 2; ni = 1; while (2 == i > ni) in++; 如何使用emacs,vi,* nix命令或其他任何内容分别用in, ni, and i或inni, inin, and nini替换i, in, and ni ?