Ir ao conteúdo

Posts recomendados

Postado

Fala galera beleza?

Bom comecei na facul Estrutura de dados e o professor usar C++, como eu utilizava o C estou com algumas dificuldades, como nesse algoritmo

#include <iostream>
#include <stdlib.h>

using namespace std;

void Bubble(int v[],int n)
{
      int i,j,guarda,trocou,k=n;

      while(1){
           trocou = 0;
           cout <<"\nRepete: "<<n-k+1<<": ";
           for(i=0; i<k-1; i++){
               if(v[i] > v[i+1])
               {
                  trocou =1;
                  guarda = v[i];
                  v[i] = v[i+1];
                  v[i+1] = guarda;

               } // FIM IF
            } // FIM FOR
               for(i=0; i<k; i++)
                  cout<<" "<<v[i];

               k--;
               if(!(trocou))
                  return ;
        } // FIM WHILE
}// FIM BUBBLE

int main()
{
     int i, n;

     cout<<"Digite quantos valores tem o vetor: ";
     cin  >> n;

     int v[n];


     for(i=0;  i<n; i++)
     {
           cout<<"Entre com o valor para V["<< i <<"]:  ";
           cin>> v[i];
     } // FIM FOR

     cout<<"Vetor desordenado: ";
     for(i=0; i<n; i++)
          cout<<" "<<v[i];

     cout<<"\n";

     Bubble(v,n);

     cout <<"\nVetor ordenado: \n";

     for(i=0; i<n; i++)
          cout<<" "<<v[i];

    cout<<endl;
} // FIM MAIN

Quando eu executo ele da um Erro "ISO C++ forbids variable length array 'v' [-Wvla]", eu não sei o motivo, se alguem souber pode me ajudar ?

Postado

Aqui compilou! Meu palpite é que a opção de compatibilidade com as versão C++ está como ativo e emitindo um alerta; não é erro, e sim um alerta acerca de que VLA não é compatível com ISO C++. Qual a IDE? observe se existe uma linha de comando com este tag: -std=xxx, o que tem no lugar dos x's?

 

 

Postado
9 horas atrás, AnsiC disse:

Qual a IDE?

Eu uso o Code Blocks mnw, será que a versão pode influenciar? lá na faculdade esse código estava executando normal \:

Postado
38 minutos atrás, MatheusINF disse:

Eu uso o Code Blocks mnw, será que a versão pode influenciar? lá na faculdade esse código estava executando normal \:

 

O compilador deve estar configurado para usar uma versão padrão da linguagem C++, como C++11, acredito que se alterar as configurações do compilador para usar -std=gnu++11 na linha de comando de compilação, que é a versão C++11 da linguagem com extensões GNU, o código deva funcionar.

 

Mas arrays com comprimento variável e comprimento flexível não são parte da versão padrão do C++, estes são recursos da linguagem C que não estão presentes no C++, mas alguns compiladores podem implementá-los e permitir usá-los no C++ (quando o compilador é configurado para isso).

 

Entretanto seria melhor aprender a fazer usando apenas os recursos do C++ para não ter problema quando não tiver essa opção, nesse caso poderia usar ponteiro, new e delete[].

 

  • Curtir 1
  • Obrigado 1
Postado
33 minutos atrás, isrnick disse:

Mas arrays com comprimento variável e comprimento flexível não são parte da versão padrão do C++, estes são recursos da linguagem C que não estão presentes no C++, mas alguns compiladores podem implementá-los e permitir usá-los no C++ (quando o compilador é configurado para isso).

Porém a cessão N3690 § 8.3.4, p185  tem um exemplo de uso.

 

  • Curtir 1
Postado

 

-std=gnu++11

 

adicionado 11 minutos depois
35 minutos atrás, isrnick disse:

O compilador deve estar configurado para usar uma versão padrão da linguagem C++, como C++11

Realmente está configurado pra ler C++11, vou tentar muda mnw, Vlwws

 

  • Curtir 1
Postado
4 minutos atrás, AnsiC disse:

Melhor compilador que existe é o GCC; com ele não existe essas frescuras.

 

O compilador que vem incluso na versão do Codeblocks com compilador é o GCC (=MinGW).

  • Curtir 1
Postado
3 minutos atrás, isrnick disse:

O compilador que vem incluso na versão do Codeblocks com compilador é o GCC (=MinGW).

Pois então, pensei que não. Já que usamos std=c++11 e não há erros.

  • Confuso 1
Postado
1 minuto atrás, AnsiC disse:

Pois então, pensei que não. Já que usamos std=c++11 e não há erros.

 

Deveria dar erro se usar -std=c++11, pois aí está especificando que só vai usar recursos padrões da linguagem, sem extensões. Usa-se isso quando não quer que coisas que não façam parte da versão oficial da linguagem funcionem.

  • Curtir 1
Postado

Tudo que li me leva acreditar que não resultar em mensagem de alerta ou erro não é algo ruim porque toda norma deve ser a soma de normas anteriores e mais, se não como ficaria o quesito compatibilidade, um caos com certeza.

  • Obrigado 1
Postado
54 minutos atrás, AnsiC disse:

Tudo que li me leva acreditar que não resultar em mensagem de alerta ou erro não é algo ruim porque toda norma deve ser a soma de normas anteriores e mais, se não como ficaria o quesito compatibilidade, um caos com certeza.

 

A que norma anterior você se refere? Nenhuma das normas da linguagem C++ inclui arrays com comprimento variável na linguagem.

 

Vale notar que C++ não é C com mais recursos, são linguagens diferentes.

Sim, o C++ foi criado a partir do C, mas foi padronizado pela primeira vez em 1998 e baseou-se na versão C89/C90 da linguagem C (arrays com comprimento flexível só foram inclusos na versão C99 da linguagem C), e cada uma seguiu seu próprio caminho desde então, logo recursos que existem no C não precisam necessariamente existir no C++.

Postado
38 minutos atrás, isrnick disse:

A que norma anterior você se refere?

N3690 

 
38 minutos atrás, isrnick disse:

Nenhuma das normas da linguagem C++ inclui arrays com comprimento variável na linguagem.

Então eu imaginei coisas, junto de uma sala de 45 estudantes de Física (na época atualmente 4), e continua vendo tais ilusões até hoje :tw_confounded: !!!

 

 
38 minutos atrás, isrnick disse:

Vale notar que C++ não é C com mais recursos, são linguagens diferentes.

Sim, o C++ foi criado a partir do C, mas foi padronizado pela primeira vez em 1998 e baseou-se na versão C89/C90 da linguagem C (arrays com comprimento flexível só foram inclusos na versão C99 da linguagem C), e cada uma seguiu seu próprio caminho desde então, logo recursos que existem no C não precisam necessariamente existir no C++.

Agora que você falou isso, lembrei de uma matéria que dizia claramente existir uma repulsa do "criado do Linux" com relação aos programadores que usam linguagem C++. Os programadores de C são Deuses e os de C++ são hereges. Viva Linux !!! 

Postado
21 minutos atrás, AnsiC disse:

N3690 

 

N3690 não é um padrão, está escrito logo na primeira página do documento:

 

Citação

Warning

 

This document is not an ISO International Standard. It is distributed for review and comment. It is subject to change without notice and may not be referred to as an International Standard.

 

Recipients of this draft are invited to submit, with their comments, notification of any relevant patent rights of which they are aware and to provide supporting documentation.

Fonte: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3690.pdf

 

N3690 é um documento que foi usado como uma das referências durante o processo de definição da norma C++14:

https://isocpp.org/blog/2013/05/new-paper-n3690-programming-languages-c-committee-draft

 

Mas o que consta na norma de fato é o que realmente é válido.

Postado

é um rascunho, ou coisa assim. 

adicionado 1 minuto depois
6 minutos atrás, isrnick disse:

N3690 não é um padrão, está escrito logo na primeira página do documento:

É um norma.

adicionado 3 minutos depois

Enfim, eu garanto para você que usar std=c++11, não é um problema, pelo menos não aqui.

Postado
9 minutos atrás, AnsiC disse:

é um rascunho, ou coisa assim. 

adicionado 1 minuto depois

É um norma.

standard = norma

 

This document is not an ISO International Standard = Este documento não é uma Norma Internacional ISO.

Postado
28 minutos atrás, isrnick disse:

This document is not an ISO International Standard = Este documento não é uma Norma Internacional ISO.

Então é um rascunho de norma.

Que posteriormente foi retirada na versão final.

 

 

Quando colocamos -std=c++14 sabe o que acontece, nada o mesmo resultado e com full warning ativo que -std=c++11. Até o editor online onlinegdb também passou pelo teste c++1x. Só o nosso colega que está amarrado :exorcize:

 

Que legal valeu!!

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!