TransWikia.com

Bibliotecas específicas e padrões dos compiladores de C em Windows e Linux

Stack Overflow em Português Asked by MrStack on November 10, 2021

Eu gostaria de saber o porque a conio.h e o strrev() da biblioteca string.h, não há no Linux.

Existe mais alguma que só é possível ser feito no Windows? E porque isso acontece?

Existe alguma que só é possível fazer no Linux?

Eu fiz algumas pesquisas, mas na maioria dos casos achei respostas muito superficiais.

2 Answers

A biblioteca conio.h e a função strrev() da biblioteca string.h não fazem parte do padrão C. Evite usá-las se o seu propósito é portabilidade.

Uma implementação alternativa de strrev() pode ser algo como:

#include <string.h>
#include <stdio.h>

char * strrev( char * s )
{
    char ch = 0;
    int j = 0;
    int i = strlen(s) - 1;

    while( i > j )
    {
        ch = s[i];
        s[i] = s[j];
        s[j] = ch;
        i--;
        j++;
    }

    return s;
}

int main( void )
{
    char str[] = "O rato roeu a roupa do rei de Roma!";
    printf( "%sn", strrev( str ) );
    return 0;
}

Saída:

!amoR ed ier od apuor a ueor otar O

Answered by Lacobus on November 10, 2021

Não existe no Windows também. Isso não é específico de plataforma, é de implementação do C, ou seja, o compilador tem uma biblioteca padrão que não implementa esta API.

Há uma especificação do que a linguagem C tem, e as implementações deve segui-la para poder ser chamada de C. Então o compilador deve ter uma biblioteca padrão que se conforme com a especificação. É verdade que, de forma geral, não proíbe ter nada a mais, e conio é algo a mais. Mas geralmente os compiladores não colocam coisas a mais, a não ser que sejam muito úteis, e muito bem implementadas, oque na prática acabará forçando entrar em uma versão nova da especificação. Se não entra é porque não deveria ter.

De fato a conio é muito ruim e não deve ser usada. Foi incluída em um compilador que queria ter diferencial e seguido por alguns outros, mas os que sobreviveram de forma sólida não fizeram isso.

Um bom compilador Windows como o VS-C++, o Clang, ou o MingW (GCC) não possui conio.

Existem diversas bibliotecas que só funcionam no Windows, ou só no Linux, ou só no MacOS, ou só no Android, etc. Até mesmo em distribuições diferentes do Linux ou outro Unix-like, ou uma variante do Windows, sem falar em versões diferentes.

Mas em geral estamos falando de APIs de plataforma e não padrão do C.

Se precisar de respostas mais aprofundadas faça perguntas mais específicas e mais detalhadas.

Answered by Maniero on November 10, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP