Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Mxt08 en 8 Junio 2020, 11:39 AM

Título: Printf sin librerias
Publicado por: Mxt08 en 8 Junio 2020, 11:39 AM
Hola,
Alguien sabe como hacer un printf o scanf, es decir, una entrada o salida de texto sin usar el stdio.h ni ninguna otra libreria? He probado el write pero no hace nada.
Gracias.
Título: Re: Printf sin librerias
Publicado por: Eternal Idol en 8 Junio 2020, 12:01 PM
Para eso tenes que usar servicios externos si o si (como la API de Windows o la BIOS por ejemplo) o acceder al hardware si escribis tu propio S.O..

Ejemplo elemental:
Código (c++) [Seleccionar]
DWORD written = 0;
WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), "HOLA", 4, &written, 0);
Título: Re: Printf sin librerias
Publicado por: Loretz en 8 Junio 2020, 15:12 PM
Yo creo que no hay manera. "La Consola" no está entre las definiciones del lenguaje, hay flujos de entrada y de salida, pero Consola no. Siempre tendrás que usar alguna librería, del C o del C++.

write está en <unistd.h> para C, o la ostream::write del C++ en <ostream>

No podrás escapar.
Título: Re: Printf sin librerias
Publicado por: EmaTomA en 9 Julio 2020, 12:58 PM
Pense en puts, pero mire mis apuntes y es de la libreria <stdio.h>
puts( "texto" );


Creo que lo que intentas no es posible.
No lo se porque no lo he probado, pero juraria que todas las funciones basicas forman parte de alguna libreria. :rolleyes:

Título: Re: Printf sin librerias
Publicado por: Eternal Idol en 9 Julio 2020, 13:46 PM
La respuesta correcta es la primera.
Título: Re: Printf sin librerias
Publicado por: Loretz en 12 Julio 2020, 00:51 AM
Citar
La respuesta correcta es la primera.
De acuerdo, siempre que no olvides
#include <windows.h>
Título: Re: Printf sin librerias
Publicado por: Eternal Idol en 12 Julio 2020, 10:36 AM
Cita de: Loretz en 12 Julio 2020, 00:51 AMDe acuerdo, siempre que no olvides
#include <windows.h>

Cita de: Loretz en  8 Junio 2020, 15:12 PMSiempre tendrás que usar alguna librería, del C o del C++.

No olvido nada, esa no es una libreria de C/C++ y estrictamente hablando puedo declarar lo necesario manualmente (incluso podria usar syscall o la interrupcion correspondiente y el mismo principio aplica a la BIOS; de ser necesario podria enlazar el resultado de ensamblar un modulo .asm para x64).

Esto es simplemente una tosca demostracion:
Código (c++) [Seleccionar]
typedef unsigned int DWORD;
extern "C" DWORD __stdcall WriteFile(DWORD, void *, DWORD, DWORD *, DWORD);
extern "C" DWORD __stdcall GetStdHandle(DWORD);
#define STD_OUTPUT_HANDLE (DWORD) -11