Может ли реализация C неявно включать стандартные заголовки при включении другого заголовка? - PullRequest
6 голосов
/ 14 июля 2011

При чтении Это правильное объявление C?Если так, то почему это не работает? Я думал о

#include <stdio.h>

int main(void) {
  int bool = 0;
  return bool == 0;
}

Строго ли соответствует эта программа?Другими словами, разрешено ли stdio.h включать stdbool.h или это запрещено?Это указано в спецификации?

Ответы [ 2 ]

5 голосов
/ 14 июля 2011

C стандартные заголовки не могут включать другие заголовки. Это отличается от C ++, где это явно разрешено.

C99 стандарт, раздел 7.1.3

Каждый заголовок объявляет или определяет все идентификаторы, перечисленные в соответствующем подпункте [...] Другие идентификаторы не зарезервированы.

3 голосов
/ 14 июля 2011

Я не уверен, что он каким-либо образом авторитетен, но вот что Plauger говорит (при условии, что это для c89).

Библиотека Standard C предоставляет пятнадцать стандартных заголовков,Заголовки имеют несколько свойств

Они взаимно независимы.Ни один стандартный заголовок не требует, чтобы сначала был включен другой стандартный заголовок, чтобы он работал должным образом. Также ни один стандартный заголовок не содержит другого стандартного заголовка .

Я не могу найти упоминаний об этом в c99 или c89.

EDIT

Я вижу inttypes.h включает stdint.h

7,8-1

Заголовок <inttypes.h> включает заголовок <stdint.h> и расширяет егос дополнительными возможностями, предоставляемыми размещенными реализациями.

...