Czy ten kod jest zgodny z standardem?Czy typy w `cname` i` name.h` mogą być różnymi typami?
#include <stdio.h>
#include <cstdio>
int main() {
FILE *f1 = 0;
std::FILE *f2 = f1;
}
Objaśnienie: Norma mówi [nagłówki]:
[...] zawartość każdego nagłówka
cname
powinna być taka sama, jak w odpowiednim nagłówkiemname.h
[... ] jakby przez włączenie. Jednak w standardowej bibliotece C++ deklaracje [...] mieszczą się w zasięgu przestrzeni nazw (3.3.6) przestrzeni nazwstd
. Nie określono, czy te nazwy są najpierw zadeklarowane w zasięgu globalnego obszaru nazw, a następnie są wprowadzane do przestrzeni nazwstd
przez jawne deklaracje-użycia (7.3.3).
Tak więc w przypadku gdy nie są wstrzykiwane przez wyraźnej używając-deklaracji, mogą być inny typ? Nie sądzę, aby zdanie "jak gdyby poprzez włączenie" było jednoznaczne, ponieważ druga połowa tekstu wyraźnie przeczy temu wymaganiu, wymagając, aby nazwy znajdowały się w przestrzeni nazw std
.
Witamy w StackOverflow. Zalecam, aby twoja odpowiedź była jak najbardziej zamknięta, więc gdy są dwa pytania (jak tutaj: (1) czy ten kod jest zgodny ze standardem i (2) czy std :: FILE i :: FILE mogą być różnymi typami), proste "tak" może być mylące. Sprawdź dokładnie, czy nie zniekształciłem tego, co masz zamiar powiedzieć. –
+1, ponieważ dokładnie tak rozumiem akapit. Zwykle jednak nie możesz tego zaimplementować w ten sposób, ponieważ przerwie się, jeśli 'stdio.h' zawiera osłony lub odpowiedniki. – ybungalobill