Vehicular ad hoc networks (VANETs) need to support the timely end-to-end transmissions of safety and non-safety messages. Medium access control (MAC) protocols can ensure fair and efficient sharing of channel resources among multiple vehicles for VANETs, which can provide timely packet transmissions and significantly improve road safety. In this paper, we review the standards of some countries for VANETs. Then, we divide the MAC protocols proposed for VANETs into single-channel MAC protocols and multi-channel MAC protocols according to the number of physical occupied spectrum resources. Both are further discussed based on their hierarchical structures, i.e., distributed and centralized structures. General design and optimization mechanisms of these commonly used MAC protocols for VANETs are reviewed. From the viewpoint of 7 aspects, we compare the advantages and disadvantages of these typical MAC protocols. Finally, we discuss the open issues to improve the MAC performance and future work on MAC design for VANETs.