Les .ino et leur compilation

C'est encore un fichier intermédiaire, ce n'est pas encore le vrai fichier cpp qui sera présenté au compilateur.
Tous les tutos de C que j'ai lu disent que la fonction main() est obligatoire en C.
Je ne pense pas que ce fichier machin.ino.cpp compile.

Le code de main.cpp se trouve dans le core Arduino (.arduino15/packages/arduino/hardware/avr/1.6.207/cores/arduino)

La compilation :

"/home/riton/.arduino15/packages/arduino/tools/avr-gcc/5.4.0-atmel3.6.1-arduino2/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-I/home/riton/.arduino15/packages/arduino/hardware/avr/1.6.207/cores/arduino" "-I/home/riton/.arduino15/packages/arduino/hardware/avr/1.6.207/variants/eightanaloginputs" "/home/riton/.arduino15/packages/arduino/hardware/avr/1.6.207/cores/arduino/main.cpp" -o "/tmp/arduino_build_200929/core/main.cpp.o"

L'objet est ajouté à la librairie core.a :

"/home/riton/.arduino15/packages/arduino/tools/avr-gcc/5.4.0-atmel3.6.1-arduino2/bin/avr-gcc-ar" rcs "/tmp/arduino_build_200929/core/core.a" "/tmp/arduino_build_200929/core/main.cpp.o"

Ensuite core.a est utilisée lors de l'édition de liens :

Linking everything together...
"/home/riton/.arduino15/packages/arduino/tools/avr-gcc/5.4.0-atmel3.6.1-arduino2/bin/avr-gcc" -w -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega328p -o "/tmp/arduino_build_200929/zzzzz.ino.elf" "/tmp/arduino_build_200929/sketch/zzzzz.ino.cpp.o" "/tmp/arduino_build_200929/core/core.a" "-L/tmp/arduino_build_200929" -lm

Il n'y a rien qui manque.

C'est assez courant dans un framework d'avoir la fonction main() dans la librairie standard.
Cela évite aux développeurs d'avoir à écrire certaines lignes (init() entre autres).