My conclusion: in 2011 you should write your program in C if you want to reach the widest audience with a single code base.
You'll still have to write some Obj-C for OSX/iOS but it's easier to interop Obj-C with C than any other language. With Android you go with NDK and you might have to write a little Java/Dalvik if the default launcher of NDK is not good enough. On desktop Linux you'll need a little bit of X11 programming.
On iOS, OSX, Android and Linux you can do use Posix system calls pretty liberally but have to keep some portability issues in mind (e.g. epoll vs. kqueue).
Of course then there is Windows, that has almost nothing in common with any other platform out there but it can still be programmed with C.
I've seen products that claim to give you portability across all these platforms but my experiences with that kind of frameworks have always been negative. Some cross platform game engines may be able to deliver a bit better.
Of course then there's the option of simply duplicating the code base for all platforms which seems to be popular with small apps. With a game, where the graphics and game logic are the majority of the code, you probably don't want to duplicate that part. You could also try writing some of the non-speed critical stuff (like game logic) with a scripting language like Lua (if your appstores allow you to do such a thing).
I am slightly disappointed that we still have to write C to write code that's fast and portable, esp. on mobile platforms. Also the lack of any kind of standard library (apart from libc and posix) makes a cross-platform developers job a bit harder.