Equivalente delle funzioni di libreria C

2

In C, quasi tutto richiede una funzione. Ciò che mi tormenta è che non so esattamente cosa sta succedendo. Se non ci fosse il file msvcrt.dll , i miei programmi C si interromperanno tutti perché è lì che sono presenti tutte le funzioni della libreria standard. Vorrei sapere quali sono gli equivalenti delle funzioni di libreria standard, ma senza dover importare stdio.h o stdlib.h . C'è una lista di cose che puoi fare senza l'assistenza della biblioteca standard? Mi piacerebbe raggiungere la "pura" C senza funzioni predefinite.

    
posta Garhoogin 21.03.2017 - 21:54
fonte

4 risposte

4

Is there a list of things you can do without the standard library's assistance? I would like to reach "pure" C without pre-defined functions.

Pensa alle cose che puoi fare in C. Quindi rimuovi le cose che richiedono funzioni predefinite. Questo è ciò che è rimasto.

Potresti scrivere il tuo strcpy o memset o sprintf , ma non c'è modo di scrivere printf in C senza chiamare una funzione predefinita. Su Linux printf chiamerà infine write che è scritto in assembly; su Windows chiamerà infine WriteFile da kernel32.dll che chiama le funzioni interne di Windows che cambiano tra le diverse versioni di Windows.

    
risposta data 21.03.2017 - 22:16
fonte
1

Una buona parte della libreria standard è lì per fornire un'interfaccia portatile alle funzioni a livello di sistema, come I / O, gestione dinamica della memoria, gestione dei processi, funzioni di data e ora, ecc. Senza di essa, avresti per replicare tutte le chiamate di sistema di basso livello, almeno alcune delle quali devono essere scritte in assembler (cioè, non "pura" C).

In un'implementazione ospitata (in pratica, qualsiasi cosa con un sistema operativo), l'intera libreria standard dovrebbe essere sempre disponibile. In un'implementazione indipendente , può essere disponibile solo un piccolo sottoinsieme della libreria standard, ma su un'implementazione di questo tipo non si farà nulla che richiederebbe comunque tali funzioni.

    
risposta data 28.03.2017 - 23:07
fonte
0

Non ho davvero capito cosa volessi ottenere.

Vuoi scrivere il modulo c in cui non vuoi utilizzare alcuna funzione di libreria standard al suo interno?

Esempio: l'intestazione stdio.h definisce tre tipi di variabili, diverse macro e varie funzioni per l'esecuzione di input e output. Per utilizzare fopen nel tuo modulo devi includere il file di intestazione "stdio.h"

FILE *fopen(const char *filename, const char *mode)

Apre il nomefile indicato dal nome del file utilizzando la modalità data.

If you don't want to use fopen then you need to write your own implementation of file open but that is reinventing the wheel.

Se hai intenzione di chiedere, vuoi avere il proprio tipo di funzione isalpha () o isnum () da implementare, puoi scriverlo sulla tua intestazione, includerlo nel tuo c source file.

Collegamento dinamico della DLL:

Puoi importare DLL, cioè librerie dinamiche, collegare queste librerie e usare quella funzione nel tuo modulo. Anche in questo caso è necessario includere i file di intestazione necessari.

    
risposta data 21.03.2017 - 22:17
fonte
0

La menzione di msvcrt.dll mi sembra che la tua vera preoccupazione siano le funzioni proprietarie di Windows che potrebbero non essere universalmente (o "eternamente") disponibili, rompendo così le tue applicazioni se (msvcrt.dll, etc, link ) sono delle dipendenze. Penso che potresti essere felice / contento usando le funzioni della libreria standard Posix, vedi, ad esempio, link o link per cui il codice sorgente è disponibile gratuitamente, ad es. link

Quindi forse quello che vuoi fare è determinare quali funzioni della libreria standard di Windows sono identiche alle controparti posix e limitare il codice dell'applicazione a quel sottoinsieme. È praticamente impossibile fare qualcosa di non banale senza utilizzare alcuna libreria standard di qualsiasi tipo.

    
risposta data 22.03.2017 - 04:11
fonte

Leggi altre domande sui tag