RE: [GD-General] C++ analyzers?
Brought to you by:
vexxed72
From: Jamie F. <ja...@qu...> - 2002-07-19 09:47:03
|
what you should be able to do, though, and i've never seen, is rename a class member in a single place, and have that change propagated to all places it's used (obviously warning you if there's a name clash :) and what's this file based compiling nonsense anyway? :) jamie -----Original Message----- From: gam...@li... [mailto:gam...@li...]On Behalf Of Brian Sharon Sent: 18 July 2002 20:28 To: gam...@li... Subject: RE: [GD-General] C++ analyzers? I hope I'm not guilty of stating the blatantly obvious, but renaming variables and checking in has to be one of the classic "I couldn't have broken the build, I didn't change anything" moves. I wouldn't think renamed symbols are a good thing to ignore, if you're trying figure out why things that used to work no longer do. --brian > -----Original Message----- > From: Peter Lipson [mailto:pe...@to...] > Sent: Thursday, July 18, 2002 11:20 AM > To: gam...@li... > Subject: RE: [GD-General] C++ analyzers? > > > coincidentally enough, today I was searching for (and not > finding..) a file > differencing program that understood C++. Most differencing > programs can be > configured to ignore whitespace; it would be nice to ignore > comments, too. > Even more powerful would be one that compared the parse-tree, ignoring > symbol name changes. This may sound frivolous, but it's not. > Typically, when > I'm merging some code into an existing project, I'll add a > ton of comments, > rename things to match a common set of naming conventions, > maybe add or > remove a few parentheses or curly braces, and maybe move a > few variable > declarations or definitions. > If the code breaks after that, I've totally lost the > ability to (in an > automated way) compare it to the original source. But none of > the above > operations -should- have changed the way the parsed code > should look. (OK, > maybe moving variable definitions could..) > > I've hunted around the net a bit, and haven't found a code > repository of > helpful little utilities like that. I suspect it's out there > somewhere, > though. > > Peter > > -----Original Message----- > From: gam...@li... > [mailto:gam...@li...]On Behalf Of > Brian Hook > Sent: Wednesday, July 17, 2002 11:35 AM > To: gam...@li... > Subject: [GD-General] C++ analyzers? > > > One of my bitches about software development are that the tools suck. > Many things that can and should be automated simply aren't. > Tools like > Emacs and make provide a lot of helpers when you have to do > this manual > stuff, but they don't actually solve problems that are > language specific > (since those tools aren't language specific). > > When working on a large codebase, invariably it acquires > several layers > of cruft and detritus. Several Java IDEs provide high level > tools to do > things like refactor, automatically name types and objects, etc. This > can be immensely useful. > > Now that I'm parked on about 120K of source code that I've written, > there are times when I want to issue a "query" about some type or > variable. > > Of course, that query ends up being "grep", which completely > and utterly > sucks when you have lots of name collisions. There are > certain variable > and function names that are so ubiquitous that grepping for > them returns > a thousand hits. init/create/alloc and shutdown/destroy/free; flags, > type, name, next, prev, id; etc. > > One way I've gotten around this is defensive coding, whereby I prefix > members with their parent type name: > > struct HSprite > { > int iSpriteWidth; //instead of iWidth > }; > > Anyone that has used an old K&R style compiler that didn't > consider the > type and global namespaces differently will probably have > done something > similar out of necessity. > > It should be entirely possible for a code analyzer to go through and > build a dependency and call graph, with knowledge of the framework's > inheritance, friendship and polymorphism, and answer queries > or generate > warnings. > > When doing spring cleaning on my code base, some of the examples of > things that I know the compiler/linker could do but simply don't (and > which requires lots of searching for me) are: > > - warn when including header files that aren't needed. A typical > example is when you're doing some debugging and you need sprintf() or > FILE so you #include <stdio.h>, but forget to remove it when you're > done. > > - warn when forward declarations aren't used or aren't relevant, e.g. > you do "class Foo" which you've later renamed to "class > FooBar", but you > still have forward declarations to a non-existent class (which don't > cause problems) > > - warn when friendships aren't necessary. This happens when you > establish a friendship from A to B because you don't want > B::privateThing accessible by the world, just by A. But then later on > you change some stuff, and now A doesn't need > B::privateThing, but it's > still a friend of the class. > > - warn about types, classes, variables, and functions that are never > referenced. This is pretty open ended, and can mean everything from > abstract base classes that are never derived from to concrete classes > that are never instantiated, but it helps to find vestigial > cruft. This > has a lot of problems if all you're doing is building a > library because > you can't tell what the client program is calling, but if you're > building test programs, it's a good way of making sure you have > reasonable coverage analysis without actually running a coverage > analysis program. > > And, I'm sure, there are a million other things it could > check for that > currently require manual intervention. Anyone know if such a tool > exists? > > -Hook ------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf _______________________________________________ Gamedevlists-general mailing list Gam...@li... https://lists.sourceforge.net/lists/listinfo/gamedevlists-general Archives: http://sourceforge.net/mailarchive/forum.php?forum_idU7 |