Warning aceitável?

Warning aceitável?

por Gustavo Estrela de Matos -
Número de respostas: 6

Coelho, compilando o meu ep com as flags "-Wall -pedantic -ansi -O2" tenho o seguinte warning:
"ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]"

. Até onde eu sei, esse warning é dado porque em algum lugar do meu código eu usei um scanf e ignorei o valor retornado pela função. Se eu realmente não vejo motivo para usar o valor retornado, tudo bem de entregar o EP com esse warning?

Em resposta à Gustavo Estrela de Matos

Re: Warning aceitável?

por Fernanda de Camargo Magano -

Eu recebi um warning dizendo que eu tinha declarado uma variável e não tinha usado a mesma [-Wunused-but-set-variable], contudo eu usei essa variável no programa. Tanto que quando eu tirei a variável da declaração para ver se desaparecia o warning, deu o erro "undeclared (first use in this function)".

Tem problema esse tipo de warning?

Em resposta à Fernanda de Camargo Magano

Re: Warning aceitável?

por Fernanda de Camargo Magano -

Desculpa pela minha pergunta anterior. Acabei de descobrir o motivo do warning.  De fato eu estava usando a variável declarada, mas ela só era inicializada se entrasse no loop.  Ao atribuir logo no começo o valor para essa variável, o warning sumiu.

 

Em resposta à Gustavo Estrela de Matos

Re: Warning aceitável?

por José Coelho de Pina -

compilando o meu ep com as flags "-Wall -pedantic -ansi -O2" tenho o seguinte warning:
"ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]"

Para eliminar o warning devido o scanf ou fscanf basta compilar com a opção -Wno-unused-result. Assim, as opções de compilação passam a ser:

-Wall -O2 -pedantic -ansi -Wno-unused-result

A propósito, vejam logo a seguir o que a man page do scanf diz. Os avisos são devidos ao fato de ignorarmos os valores retornados pela função:

meu_prompt> man scanf
SCANF(3)                                                        Linux Programmer's Manual                                                        SCANF(3)

NAME
       scanf, fscanf, sscanf, vscanf, vsscanf, vfscanf - input format conversion

SYNOPSIS
       #include <stdio.h>

       int scanf(const char *format, ...);
       int fscanf(FILE *stream, const char *format, ...);
       int sscanf(const char *str, const char *format, ...);

       #include <stdarg.h>

       int vscanf(const char *format, va_list ap);
       int vsscanf(const char *str, const char *format, va_list ap);
       int vfscanf(FILE *stream, const char *format, va_list ap);

   Feature Test Macro Requirements for glibc (see feature_test_macros(7)):

       vscanf(), vsscanf(), vfscanf():
           _XOPEN_SOURCE >= 600 || _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L;

DESCRIPTION
       The  scanf() family of functions scans input according to format as described below.  This
       format may contain conversion specifications; the results from such conversions,  if  any,
       are  stored in the locations pointed to by the pointer arguments that follow format.  Each
       pointer argument must be of a type that is appropriate for the value returned by the  cor‐
       responding conversion specification.

[... monte de informações removidas ...]


RETURN VALUE
       These functions return the number of input items successfully matched and assigned,  which
       can be fewer than provided for, or even zero in the event of an early matching failure.

       The  value EOF is returned if the end of input is reached before either the first success‐
       ful conversion or a matching failure occurs.  EOF is also returned if a read error occurs,
       in  which case the error indicator for the stream (see ferror(3)) is set, and errno is set
       indicate the error.

[... mais monte de informações removidas ...]
Em resposta à José Coelho de Pina

Re: Warning aceitável?

por Marcelo Rabello Rossi -

Aproveitando o tópico do Gustavo sobre Warning, não é raro eu obter warnings desse tipo:

ld: can't link with a main executable for architecture x86_64
collect2: ld returned 1 exit status

Li que estão relacionados ao acesso do compilador às bibliotecas, mas não entendi o motivo. É um warning aceitável? Por que ocorre?

Em resposta à Marcelo Rabello Rossi

Re: Warning aceitável?

por Caio Braz -

EDIT: Tinha escrito algumas besteiras na resposta anterior...

O problema neste caso é a arquitetura! Seu compilador não está conseguindo "linkar" alguma biblioteca para criar um binário que rode na arquitetura de 64bits (x86_64).

Qual a linha de comando que foi utilizada quando ocorreu este warning? Para mim está com mais cara de erro do que warning...