Not sure why we are in this thread but OK.
You will need some way to test the code. The two methods
1) flash cart and GBA hardware (GBA, SP, micro, DS, DS lite, GB player, GBA hardware clone like the k101*, and possibly some other stuff). Technically you could also build a multiboot cable and boot small pieces of homebrew. There are many flash carts but realistically the two you will want to look at are the EZ4 (the successor to the one discussed in this topic) and the EZ 3 in 1 which is a small cart aimed for used with DS flash carts on the DS/DS lite, if you have a DS/DS lite and wish to program it there then you can use it on a GBA but that is a very awkward way of setting about things when the EZ4 is a standalone device. Purely for homebrew you might consider a fire card if you find one, I would not consider a GBA supercard though.
If you get an EZ4 then do not get the EZ4 lite compact as it does not support much GBA stuff (GBA needs fast flash cart memory hence the relative expense compared to the DS, the lite compact skimped on this to allow people a cheaper entry into the DS flash cart world of the time which still used the GBA slot), it will run smaller pieces of homebrew (bigger than multiboot) but I would still say just get a regular EZ4 (there is a newer model out now which is GBA sized, supports SDHC and uses the microSD form factor).
*the k101 comes with its own flash cart type thing that is basically just a SD adapter.
2) Emulators. On the PC that would be basically VBA (these days probably VBA-m, though for proper debugging VBA-SDL and VBA-SDL-h are probably better choices) or no$gba which has since seen its debug version be released for free.
Emulators are great and with the possible exception of header stuff (which is very simply fixed) and some weird aspects of sleep mode, especially with flash carts, then it will likely work just fine on hardware -- it is not like older SNES emulators or the N64 where you have all sorts of weird quirks an basically has been since day 1 (almost literally -- the GBA dev docs leaked ahead of time so there was pretty good emulation from the start).
You will also need a means to program for the GBA. There are some interpreted languages for the GBA but most are proof of concept and I would not use them for day to day stuff. The languages in use are pretty much C and assembly, I am not sure of the current state of C++ on the GBA is but that little bit of extra memory/resources that it wants was usually enough to tank it for GBA purposes (DS managed somewhat better). C has a variety of compilers and development environments (devkitpro/devkitarm, agb toolchains, visualham, armSDT to name most of the common ones) but unless you are updating an old homebrew then you have very little excuse for not using devkitpro -
http://devkitpro.org/ (devkitpro has a variety of options for different consoles and devices, devkitarm would be the one that targets the GBA, DS and the like).
While I am linking then
http://www.coranac.com/tonc/text/ and
http://problemkaputt.de/gbatek.htm