SORU
3 EYLÜL 2008, ÇARŞAMBA


işlev bildirimi't bir prototip değil

Ben oluşturulan bir kütüphane var

mylib.c:

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

mylib.h:

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

Benim program bu kütüphane işlevini çağırmak için çalıştık:

myprogram.c:

#include <mylib.h>

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

Bu programı derlemeye çalıştığımda aşağıdaki hatayı alıyorum:

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

Kullanıyorum: gcc (GCC) 3.4.5 20051201 (Red Hat 3.4.5-2)

Benim sorum, bir işlev prototip bildirmek için doğru yol nedir?

CEVAP
6 EYLÜL 2008, CUMARTESİ


C int foo() int foo(void) farklı işlevleri vardır. int foo() int foo(void) 0 bağımsız değişkenleri kabul etse de argümanların rastgele bir sayı kabul eder. C içinde aynı şey demek. Sürekli tartışma yok yani ne zaman void kullanmanızı öneririm.

Eğer bir değişken a, extern int a; yol söyle derleyici a bir sembol olabilir mevcut farklı bir çeviri birimi (C derleyici konuşmak için kaynak dosyası), yok çözmek o kadar bağlantı zaman. Öte yandan, işlev adları olan semboller yine de bağlantı zaman çözülür. Bir fonksiyon (örneğin, ** 16 ** 17) Depolama sınıfı belirleyici anlamı sadece kendi görünürlüğünü etkiler ve extern extern aslında gereksiz olduğu varsayılan, bu yüzden.

extern, gereksiz olduğu kaldırmayı öneriyorum ve genellikle ihmal edilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ciaran Blumenfeld

    Ciaran Blume

    20 NİSAN 2009
  • dirkgently1

    dirkgently1

    13 NİSAN 2006
  • GavinMichaelBooth

    GavinMichael

    26 AĞUSTOS 2006