2013-05-22 21 views
5

Podczas answering a question że skorzystał z niektórych funkcji (sscanf_s i sprintf_s), że myśl nie były standardowe C, Daniel Fischer zwrócił moją uwagę, że funkcje te były zdefiniowane w załączniku K.Czy wymagane jest wsparcie dla załącznika K w C11 dla wykonania zgodnego z wymaganiami?

rozumiem ogólnie, że normatywna oznacza, że ​​pomaga zdefiniować standard. Ale załącznik do standardu C tradycyjnie był traktowany wyłącznie jako informacyjny. Załącznik K jest oznaczony jako normatywny w standardzie C11. Definiuje funkcje "bezpieczne".

Czy to oznacza, że ​​kompilator, który nie udostępnia tych funkcji, nie jest zgodny ze standardem C11?

Mam do dyspozycji tylko projekt normy C11, ale stwierdza on, że załącznik K jest normatywny, ale sekcja biblioteki normy nie wspomina o funkcjach omówionych w załączniku K. Uwaga w definicji runtime-constraint wydaje się implikować, że Załącznik K definiuje rozszerzenie.

Czy załącznik normatywny definiuje tylko opcjonalne rozszerzenie?

+0

Załączniki D, F, G, K, L są normatywne w ISO/IEC 9899: 2011. Pozostałe (A, B, C, E, H, I, J) mają charakter informacyjny. –

Odpowiedz

12

Załącznik K jest opcjonalny; tak samo mówi.

See K.2 ustęp 2:

Implementacja który definiuje __STDC_LIB_EXT1__ są zgodne ze specyfikacjami w niniejszym załączniku.

z przypisem:

implementacje, które nie definiują __STDC_LIB_EXT1__ nie muszą być zgodne z tymi specyfikacji.

I pkt 3 mówi:

Podrozdzia K.3 należy czytać tak, jakby zostały połączone w równoległym struktury wymienionych podrozdziałów klauzuli 7.

dlatego nie trzeba o tym wspominać w dziale bibliotecznym, klauzula 7 (a przynajmniej autorzy normy nie uważali tego za konieczne).

Implementacja, która definiuje __STDC_LIB_EXT1__ musi zdefiniować ją jako 201112L; zarówno N1570, jak i wydany standard C11 źle to zrozumiały, ale zostało to naprawione w technicznym sprostowaniu.

+0

Dzięki, przeglądałem inne normatywne załączniki i widziałem że wszystkie z nich dostarczają trochę makr do deklarowania ich dostępności, z wyjątkiem załącznika D. Czy to oznacza, że ​​wymagany jest załącznik D? – jxh

+0

Tak, 6.4.2.1, który definiuje składnię identyfikatorów, bezwarunkowo odnosi się do załącznika D. –

3

Jest to "normatywny" w tym sensie, że implementacja podnosząca poparcie dla załącznika K musi spełniać określone w nim wymagania. To nie jest obowiązkowe.

+0

Zatem program napisany przy użyciu funkcji zdefiniowanych tylko w zgodnym załączniku do standardu nie jest ściśle zgodny z programem? – jxh

+4

@ user315052 "Program ściśle zgodny może korzystać z funkcji warunkowych (patrz 6.10.8.3) pod warunkiem, że użycie jest chronione przez odpowiednią warunkową dyrektywę o przetwarzaniu wstępnym przy użyciu powiązanego makra. " –

+0

@ Daniel Fischer: Gotcha, dzięki. | Rozgryzłam się po zobaczeniu odpowiedzi Keitha Thompsona – jxh