That is possible because the standard library is automatically linked, so you only need a valid prototype, correct? (Wouldn't work if a global object like std::cout is required)
> I am following a C++ Book; In one exercice, the Author ask over how to use the "puts()" call without its header;
As far as C++ is concerned, there is no portable, standard way to this.
The entities in the C++ standard library are defined in headers, whose contents are made available to a translation unit when it contains the appropriate #include preprocessing directive. http://eel.is/c++draft/using.headers
and
Whether a name from the C standard library declared with external linkage has extern "C" or extern "C++" linkage is implementation-defined. It is recommended that an implementation use extern "C++" linkage for this purpose.
Footnote: The only reliable way to declare an object or function signature from the C standard library is by including the header that declares it, notwithstanding the latitude granted in 7.1.4 of the C Standard. http://eel.is/c++draft/using.linkage