
		paulo1205
		
		(usa Ubuntu)
		
		Enviado em 25/05/2019 - 18:02h 
		Matheus10772 escreveu:
Na verdade, a função main não precisa ser do tipo int porque eu não preciso retornar nada. 
Errado.  Se o seu programa executar num sistema operacional como Linux, Windows ou MS-DOS, ou qualquer outro que caracterize que um 
ambiente hspedado (
hosted environment) para o programa em C, então o padrão da linguagem (§5.1.2.2.1 do padrão de 2011, que é pago, mas cujo rascunho pode ser encontrado em 
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1548.pdf) determina que você tem de retornar um valor do tipo 
int.  E essa determinação já existia desde o primeiro padrão (de 1989).
Se o seu compilador está aceitando outra especificação, é porque eles deve estar compilando em modo permissivo (geralmente para habilitar a compilação de código obsoleto, anterior à padronização do C) e com opções de diagnóstico desabilitadas.  Não tome esse caso como se fosse a regra, pois não é.
Eu recomendo fortemente que você não utilize código obsoleto.  E recomendo também que você ligue o máximo de opções de diagnóstico que seu compilador tiver (se você estiver usando o compilador do GCC, indico pelo menos as opções “
-O2 -Wall -Werror -pedantic-errors”), pois elas ajudarão você a garantir que seu código vai conseguir compilar com o mínimo de dificuldades em múltiplos ambientes diferentes.
E os parenteses pode ficar vazios, escrever void dentro deles é opcional. 
Não é opcional em C (poderia ser em C++, que tem uma semântica para a lista de argumentos vazias diferente da que tem o C, mas não parece que você esteja usando C++).  A mesma §5.1.2.2.1 determina que você deve usar uma das formas alternativas que eu indiquei na mensagem anterior. 
Em C, a lista de argumentos vazia significa que a função pode receber qualquer quantidade de argumentos de quaisquer tipos.
Com relação a função soma, eu modifiquei o código, mas ainda não consigo entender o que pode estar errado.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
float soma (float valor[], int X){
    if(valor[X]==0) return 0; 
 
Tem certeza de que o critério para interromper a recursividade depende do 
valor do elemento?  Não seria com base no 
índice desse elemento?
     return valor[X] + soma(valor[], X-1); 
 
Esses colchetes vazios estão errados.
Eu tenho quase certeza de que o seu compilador deve ter alarmado a respeito dessa linha, indicando erro de sintaxe, não?  Se sim, então existe uma indicação clara de erro que você poderia ter corrigido antes de postar o código aqui.
Duas violações da §51.2.2.1 na declaração de 
main().
Aconselho-o a usar nomes mais significativos para suas variáveis, e evite usar nomes distintos entre si apenas no fato de que um usa letras minúsculas e o outro, maiúsculas, e mais especialmente quando as letras minúsculas e maiúsculas tem formatos muito parecidos, pois isso dificulta a leitura, tanto visualmente quanto semanticamente.
    printf("\nDigite quantos números deseja somar ");
    scanf("%d", &x);  
Alguns sistemas modernos (por exemplo, todos os derivados do Debian, incluindo Ubuntu e Mint) podem reclamar do fato de você não verificar o valor de retorno de 
scanf(), pelo potencial que isso abre para que uma falha de segurança e erros de execução, pois o valor da variável que deveria ter sido lida mas não foi pode ficar indefinido.
Acostume-se, portanto, a verificar o estado da entrada após o retorno de cada operação de leitura.
    X=x+1;
      float valor[X],resultado;
        valor[0]=0; 
 
Se você usar o índice do elemento na função 
soma(), não vai precisar da gambiarra de usar um elemento a mais.  Até porque, se você não conhecer antecipadamente os dados que o usuário do seu programa tiver, não deveria impedi-lo, na prática, de colocar uma das parcelas como zero.
    printf("\nDigite números para somar");
    for(int i=1; i<=X; i++){ 
 
Esse “
<=” está errado.  Deveria ser apenas “
<”.
E se você usar o índice em lugar do valor em 
soma(), pode contar de [0, 
x), em lugar de [1, 
X) (e pior ainda se for [1, 
X], por causa do “
<=”).
    scanf("%f", &valor[i]);
    }
    resultado=soma(valor,X);
    printf("A soma é %f", resultado);
}  
... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)