'arp -[d]a' do not require hostname as told in the manual page.
A single fprintf() is both shorter and cleaner.
Index: arp.8
===================================================================
RCS file: /cvs/src/usr.sbin/arp/arp.8,v
retrieving revision 1.39
diff -u -p -r1.39 arp.8
--- arp.8 5 Apr 2016 18:18:42 -0000 1.39
+++ arp.8 19 Jun 2017 10:15:10 -0000
@@ -40,7 +40,7 @@
.Nm arp
.Op Fl adn
.Op Fl V Ar rdomain
-.Ar hostname
+.Op Ar hostname
.Nm arp
.Op Fl F
.Op Fl f Ar file
Index: arp.c
===================================================================
RCS file: /cvs/src/usr.sbin/arp/arp.c,v
retrieving revision 1.79
diff -u -p -r1.79 arp.c
--- arp.c 19 Apr 2017 05:36:12 -0000 1.79
+++ arp.c 19 Jun 2017 10:15:10 -0000
@@ -601,11 +601,10 @@ ether_str(struct sockaddr_dl *sdl)
void
usage(void)
{
- fprintf(stderr, "usage: arp [-adn] [-V rdomain] hostname\n");
- fprintf(stderr, " arp [-F] [-f file] [-V rdomain] "
- "-s hostname ether_addr\n"
- " [temp | permanent] [pub]\n");
- fprintf(stderr, " arp -W ether_addr [iface]\n");
+ fprintf(stderr, "usage: arp [-adn] [-V rdomain] [hostname]\n"
+ " arp [-F] [-f file] [-V rdomain] -s hostname ether_addr\n"
+ " [temp | permanent] [pub]\n"
+ " arp -W ether_addr [iface]\n");
exit(1);
}