In this context by "arduino" you must mean your Arduino Uno. The compiler used by the Arduino IDE for the Uno is avr-gcc. So if you want to program your Uno with C++ but don't want any of the Arduino libraries then just use avr-gcc directly. Or you could use the Arduino IDE but not use any of the Arduino libraries.
But you need to understand that Arduino sketches are C++. There is no Arduino language, only some helpful libraries, mostly in C++. If you start writing programs with the Arduino IDE I guarantee you will learn C++, even if you take advantage of the many useful libraries available to you. You're always welcome to open up the library source files and learn from them instead of pretending they don't exist.
As has been mentioned, the main function is hidden away in the Arduino core library but you are welcome to override it by defining your own.
You may notice that Arduino sketches have the extension .ino, which is not a standard extension used for C++ files. The reason for this is that there is a minor amount of preprocessing done on .ino files before they are renamed with the .cpp extension and compiled with the C++ compiler. The preprocessing is:
- Concatenate all
.inofiles in the sketch, starting with the file that matches the folder name, then the rest in alphabetical order. - Add the line:
This brings in the Arduino core library functions.#include <Arduino.h> - Generate function prototypes for any functions that don't already have prototypes.
If you don't want prototypes to be generated then you just need to declare them yourself. - Add
#linedirectives so that compiler output will match the sketch.
So valid C++ is always fine in a sketch but the Arduino IDE does allow you to skip a couple minor aspects of C++ for the sake of being beginner friendly
Sketch preprocessing is only done on .ino files. You can also use .h, .cpp, .c, .S, etc. files in your sketch and these will not be modified in any way.