Função strrev() no Linux [RESOLVIDO]

1. Função strrev() no Linux [RESOLVIDO]

Steve
Steve

(usa Slackware)

Enviado em 14/05/2018 - 19:36h

Ainda aprendendo C e claro olhando códigos prontos na Internet entre outros sites...
Me deparei com essa função strrev()
O caso é que os sites, cursos pela internet, falam dela como algo normal, presente na biblioteca string.h da Linguagem C.
Eu havia entendido que a biblioteca string.h pertence a linguagem C
Então me deparo com alguns sites informando que essa função NÃO EXISTE no Linux no compilador gcc. É essa parte que EU não consegui entender o porque?

Isso me deixou confuso porque como saberei o que faz parte de C ou o que não faz parte! E o porque essa função foi removida do Linux apenas! Alguém sabe explicar?


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 15/05/2018 - 00:13h

Steve escreveu:

Ainda aprendendo C e claro olhando códigos prontos na Internet entre outros sites...
Me deparei com essa função strrev()
O caso é que os sites, cursos pela internet, falam dela como algo normal, presente na biblioteca string.h da Linguagem C.


O problema é que grande parte do material sobre C que existe em Português na Internet é derivado das mesmas fontes obsoletas, voltadas principalmente para MS-DOS e para Turbo C, ou usa como referência uma das edições do péssimo, do ponto de vista técnico, C Completo e Total (tradução do C: The Complete Reference), escrito pelo Herbert Schildt.

Eu havia entendido que a biblioteca string.h pertence a linguagem C
Então me deparo com alguns sites informando que essa função NÃO EXISTE no Linux no compilador gcc. É essa parte que EU não consegui entender o porque?


O cabeçalho <string.h> certamente existe no Linux, e contém todas as funções padronizadas da biblioteca do C. A questão é que muitos sistemas, padrões secundários e implementações específicas de compiladores estendem a biblioteca padrão do C, inclusive colocando conteúdo a mais nos cabeçalhos padronizados.

O mal é quando as pessoas que escrevem material didático, por falta de conhecimento, não sabem separar o que faz parte do padrão daquilo que é a extensão particular de uma determinada plataforma alvo.

NOTA: Não é ilegal estender a biblioteca padrão e os cabeçalhos padronizados. O que seria impróprio é retirar conteúdo padronizado ou oferecer funcionalidade diferente para tal conteúdo e, ainda assim, alegar compatibilidade com o padrão.

Isso me deixou confuso porque como saberei o que faz parte de C ou o que não faz parte! E o porque essa função foi removida do Linux apenas! Alguém sabe explicar?


Como se dizia antigamente: RTFM (sem ofensa — era assim que o pessoal falava mesmo!).

E essa função não foi removida só do Linux. Ela apenas fez parte de alguma implementação comum nos PCs com DOS, e acabou permanecendo, por compatibilidade, em muitas implementações voltadas para essa plataforma, bem como suas sucessoras.

3. Re: Função strrev() no Linux

Fernando
phoemur

(usa Debian)

Enviado em 14/05/2018 - 21:04h

de acordo com
https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strrev-wcsrev

strrev, wcsrev
These POSIX functions are deprecated. Use the ISO C++ conformant _strrev, _wcsrev, _mbsrev, _mbsrev_l instead.


Motivo:

These functions might be vulnerable to buffer overrun threats. Buffer overruns can be used for system attacks because they can cause an unwarranted elevation of privilege.



4. Re: Função strrev() no Linux [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 14/05/2018 - 23:50h

phoemur escreveu:

de acordo com
https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strrev-wcsrev

strrev, wcsrev
These POSIX functions are deprecated. Use the ISO C++ conformant _strrev, _wcsrev, _mbsrev, _mbsrev_l instead.


Calúnia da Microsoft, que culpa o POSIX por tudo quanto é lixo que aparece na MSVCRT.LIB! Essa função nunca fez parte do padrão do C, e muito menos do POSIX, e por isso não existe no Linux.

Eu diria que é muito mais provável que uma tranqueira dessas seja herdada de velhos compiladores para MS-DOS, inclusive o próprio compilador da Microsoft.


5. Re: Função strrev() no Linux [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 15/05/2018 - 11:56h

paulo1205 escreveu:

Eu diria que é muito mais provável que uma tranqueira dessas seja herdada de velhos compiladores para MS-DOS, inclusive o próprio compilador da Microsoft.


Ver, por exemplo, https://archive.org/details/bitsavers_borlandturReferenceGuide1988_19310204, página 372 (note como, ao contrário das funções padronizadas, a descrição dessa função não tem a seção Portability, indicando que é uma extensão da implementação). Esse livro é de 1988, antes, portanto, da homologação do primeiro padrão da linguagem C, o ANSI C, de 1989. Entretanto, o ANSI C é mencionado na descrição de funções que viriam a fazer parte do padrão, porque esse grupo de trabalho já vinha se reunindo havia alguns anos, e a própria Borland tinha seus representantes nos comitês de padronização.

Enquanto procurava por esses alfarrábios, encontrei um link interessante na Wikipedia: https://en.wikipedia.org/wiki/C_string_handling.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts