I don’t like it beeing removed on save. This can create really much noise when contributing to projects in which whitespace has not been thought of when initially created.
For this reason I like having control over the exact point in time when I do a cleanup.
I don’t know if there is a proper binding, but I do use it very seldom, so I just do it like this: SPC : whitespace-cleanup.
Also there is a nice feature called batch mode in emacs, which does allow the following small thing:
for file in *.[hc]; do
emacs --batch "$file" --eval '(setq-default indent-tabs-mode nil)' --eval '(whitespace-cleanup)' -f save-buffer
This is specialised for C-headers and Source-files, but can be modified easily by changing the glob in the first line. This does also remove tabs used for indent and replaces them with the correct amount of spaces configured for the given filetype.
I have my Emacs delete trailing whitespace and I think everyone should do that. I contribute to projects that has some whitespace and in those cases I use Magit to selectively choose what lines to stage and commit.