retorno - prototipo de função em c




declaração de função não é um protótipo (2)

Eu tenho uma biblioteca que criei

mylib.c:

#include <mylib.h>
int
testlib() {
    printf("Hello world\n");
    return (0);
}

mylib.h:

#include <stdio.h>
extern int testlib();

No meu programa, tentei chamar essa função de biblioteca:

myprogram.c:

#include <mylib.h>

int
main (int argc, char *argv[]) {
    testlib();
    return (0);
}

Quando eu tento compilar este programa, recebo o seguinte erro:

In file included from myprogram.c:1
mylib.h:2 warning: function declaration isn't a prototype

Estou usando: gcc (GCC) 3.4.5 20051201 (Red Hat 3.4.5-2)

Minha pergunta é: qual é a maneira correta de declarar um protótipo de função?


Em C int foo() e int foo(void) são funções diferentes. int foo() aceita um número arbitrário de argumentos, enquanto int foo(void) aceita 0 argumentos. Em C ++ eles significam a mesma coisa. Eu sugiro que você use void consistentemente quando você quer dizer sem argumentos.

Se você tiver uma variável a , extern int a; é uma maneira de dizer ao compilador que a é um símbolo que pode estar presente em uma unidade de tradução diferente (o compilador C fala por arquivo de origem), não o resolva até a hora do link. Por outro lado, símbolos que são nomes de funções são resolvidos na hora do link. O significado de um especificador de classe de armazenamento em uma função ( extern , static ) afeta apenas sua visibilidade e extern é o padrão, portanto, extern é realmente desnecessário.

Sugiro remover o extern , é estranho e geralmente é omitido.


Experimentar:

extern int testlib(void);




gcc