[Python-de] urllib2 und tarfile

Olе Streicher ole-usenet-spam at gmx.net
Mo Mär 18 09:20:44 CET 2013


Marek Kubica <marek at xivilization.net> writes:
> ole-usenet-spam at gmx.net (Olе Streicher) wrote:
>> Hast Du ein konkretes Beispiel? Man kann auch in K&R C (also ohne
>> Prototypen) Signalhandler definieren und setzen.
> foo.c:
> /*int bar(char*);*/ 
[...]
> Wenn man den Prototypen einkommentiert dann gehts, ansonsten weigert
> sich GCC das zu bauen. Wenn man den Callback-Aufruf weglässt dann kann
> man bar auch so aufrufen, ohne Prototyp.

Das hat nichts mit Prototypen zu tun. Deklariere bar einfach ganz normal
im K&R Style, und es geht:

----------8<--------
extern bar();

void callback(cb)
int (*cb)();
{
    cb("Test");
}

main()
{
    callback(bar);
    bar("Test");
    return 0;
}
----------8<--------

--> Man braucht keine Prototypen für Callbacks. Der Compiler muss
wissen, dass es sich bei bar() um eine Funktion handelt (daher braucht
man eine Deklaration), aber die genauen Aufrufparameter sind
gleichgültig. Auch beim gcc.

Prototypen sind nicht für den Compiler nötig, sondern erhöhen die
Typsicherheit -- etwas, dessen Notwendigkeit hier so grundsätzlich
bestritten wird. Warum also wurde es eingeführt? Und warum wird es
selbst in der Python-C-API verwendet?

Ole


Mehr Informationen über die Mailingliste python-de