Verständnis C namespaces

Zitat aus hier,

In C gibt es zwei verschiedene namespaces von Typen: ein Namensraum struct/union/enum-tag-Namen und einem namespace-von typedef-Namen.

Namen.c

$ cat name.c
#include<stdio.h>

typedef long long long2;

int long2 () {
    return 4;
}

int main() {

    printf("hello, world!");
    return 0;
}
$ gcc name.c -o name
name.c:4: error: 'long2' redeclared as different kind of symbol
name.c:3: error: previous declaration of 'long2' was here
$

name2.c

$ cat name2.c
#include<stdio.h>

int four() {
    return 4;
}

struct dummy {
    int member;
};

int main() {

    struct dummy four;
}

$ gcc name2.c -o name2
$ 

Ich versuche zu verstehen C namespace-Konflikte.

  • Im ersten Fall, warum gibt es einen Konflikt? Tun Funktionen gehören auch die typedef-namespace?

  • Im zweiten Fall, warum gibt es keinen Konflikt überhaupt? Die Funktion und die variable beide benannt sind die vier. Warum tut der compiler zulassen? Wie ist &four soll gelöst werden?

InformationsquelleAutor Lazer | 2010-09-25
Schreibe einen Kommentar