el 2 d’agost del 216 abans de la nostra era, en una plana de la pulla vora el riu àufid, l’exèrcit més gran que roma havia tret mai al camp va avançar contra el centre d’anníbal creient que l’escombrava. com més avançava, més es ficava en una bossa que el cartaginès va tancar pels flancs i per l’esquena. les dues fonts principals, polibi i livi, coincideixen en la maniobra i discrepen en gairebé tot el que es pot comptar.
acabat el comandament de fabi màxim, el senat va decidir presentar batalla. polibi explica que ho va fer amb vuit legions, cosa que roma no havia fet mai, reforçades fins a cinc mil infants i tres-cents genets cadascuna, més altres tants infants aliats; en total eren uns vuitanta mil infants i una mica més de sis mil genets. livi és més prudent: els autors discrepaven tant en el nombre i en el tipus de tropes que ell no gosa afirmar gairebé res, tot i que recull que alguns donaven vuitanta-set mil dos-cents homes al campament romà. al davant, segons tots dos, anníbal tenia uns quaranta mil infants i deu mil genets. abans de la batalla, s’havia apoderat de la ciutadella de cannes, on els romans guardaven el gra de la comarca.
el comandament el compartien dos cònsols que s’alternaven cada dia. la tradició que segueixen polibi i livi carrega la culpa sobre un d’ells: luci emili paul·le no volia combatre en una plana sense arbres davant d’una cavalleria superior, i gai terenci varró, per inexperiència, diu polibi, era del parer contrari. era el dia de varró quan l’exèrcit va creuar el riu i va formar mirant al sud.
el desplegament d’anníbal el descriu polibi amb precisió. a l’esquerra, vora el riu, la cavalleria ibera i gal·la d’àsdrubal, un dels seus oficials; a la dreta, els númides; al centre, ibers i gals alternats, amb mitja infanteria africana a cada costat. després va avançar les companyies centrals d’ibers i gals fins a formar una mitja lluna amb la cara convexa cap a l’enemic, cada cop més prima cap als extrems, i va deixar els africans enrere als flancs: el seu propòsit, escriu polibi, era fer-los servir de reserva i començar la batalla amb els ibers i els gals. que estiguessin amagats, com es llegeix de vegades, no ho diuen ni polibi ni livi. livi hi afegeix un vent que els de la regió anomenaven volturn, que aixecava pols contra la cara dels romans.
la cavalleria d’àsdrubal va xocar primer amb la romana vora el riu, en un combat sense maniobres en què els genets van acabar desmuntant i lluitant cos a cos, i la va destrossar. al centre, ibers i gals van aguantar una estona i després van cedir, diu polibi, arrossegats pel pes de les legions; la mitja lluna es va anar invertint i els romans, perseguint-los, es van estrènyer cap al centre fins a tenir els africans als dos costats. llavors aquests van girar sobre els flancs, «com anníbal havia previst». a l’altre extrem, els númides mantenien ocupada la cavalleria aliada; àsdrubal hi va acudir, l’aliada va fugir sense esperar-lo, i ell va deixar la persecució als númides i va carregar una vegada i una altra contra la rereguarda de les legions. livi explica a més una estratagema que polibi ignora: cinc-cents númides que van fingir desertar, van lliurar les armes i, un cop darrere de les línies romanes, van treure espases amagades i van atacar per l’esquena.
livi no gosa donar la xifra de l’exèrcit romà; polibi dóna la dels morts: setanta mil.
emili paul·le va morir a la batalla, i les dues fonts ho expliquen de manera diferent. en polibi, es va ficar al centre per animar les legions i va caure en el punt més aferrissat, cobert de ferides. en livi, un projectil de fona el va ferir greument al principi; quan el tribú gneu lèntul el va trobar assegut sobre una roca, cobert de sang, i li va oferir el seu cavall, el cònsol el va rebutjar i li va fer un encàrrec: dir a fabi màxim que havia viscut i moria fidel als seus consells. varró va escapar a venusia amb uns quants genets; polibi, hostil, diu que es va deshonrar fugint.
les xifres no quadren. polibi dóna uns setanta mil morts, deu mil presoners —els que s’havien quedat al campament romà i, durant la batalla, van assaltar el cartaginès— i a penes tres mil infants i uns tres-cents setanta genets escapats; del costat cartaginès, uns quatre mil gals, mil cinc-cents ibers i africans i dos-cents genets. livi rebaixa els morts a quaranta-cinc mil cinc-cents infants i dos mil set-cents genets, uns quaranta-vuit mil, i compta tres mil infants i mil cinc-cents genets capturats a la batalla; molts més es van refugiar als dos campaments i al llogaret de cannes, i van acabar rendint-se o obrint-se pas fins a canúsium. els púnics morts, diu, van ser uns vuit mil. tampoc no coincideixen els noms: polibi posa entre els caiguts els dos cònsols de l’any anterior, marc atili i gneu servili; livi, servili i marc minuci, el cap de la cavalleria que un any abans havia anomenat pare fabi. livi hi afegeix vint-i-nou tribuns militars i uns vuitanta senadors o homes que havien exercit les magistratures que donaven entrada al senat.
la data la conserva aule gel·li, que cita l’analista claudi quadrigari: el quart dia abans de les nones de sextilis, el nostre 2 d’agost en el calendari romà anterior a la reforma de cèsar. el lloc exacte, i a quina riba de l’àufid es va combatre, encara es discuteix. livi la compara amb la derrota de l’àl·lia, la que va deixar roma a mercè dels gals: menys greu pel que va venir després, perquè anníbal no va marxar sobre la ciutat, però més dura per la matança de l’exèrcit. mai fins llavors no havia perdut roma tants homes en una batalla. el que va venir després va ser la negativa de roma a rendir-se.