Redefining a #define is an hard error in C++ now (not in C because the standards differ). gcc-4.3.0 tries to conform => smartmontools do not like that.
Attached patch should fix the compile. I think it preserves behaviour but it should be noted that 1 line above the fix, the old value of the define is used than the redefinition happens and then the new value is used. I do not have any clue how the preprocessor handles this but i assumed it uses the new value only from the point of redefinition onwards.
Created attachment 141142 [details, diff]
gcc-4.3.0 patch for smartmontools-5.37
Current GCC svn reverts the change that made redefinitions errors. See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24924. Any checkout after -r131530 (14 Jan 2008) will work. Thanks for the patch though. :)