不包括#include

我编写了以下程序而不包括#include 。 我能够执行该程序。 这些原型在哪里宣布? 我正在使用gcc

1。

 #include  int main() { if(isalnum(';')) printf("character ; is not alphanumeric"); if(isalnum('A')) printf("character A is alphanumeric "); return 0; } 

2。

 #include  int main() { printf("Lower case of A is %c \n", tolower('A')); printf("Lower case of 9 is %c \n", tolower('9')); printf("Lower case of g is %c \n", tolower('g')); printf("ASCII value of B is %d \n", toascii('B')); printf("Upper case of g is %c \n", toupper('g')); return 0; } 

  1. 在您的代码中,这些函数是隐式声明的 ,因此它们不包含在任何特定的头中。 如果您为编译器调高警告级别,您将看到(例如GCC):

     $ gcc -Wall -o ac ac: In function 'main': ac:4: warning: implicit declaration of function 'isalnum' 

    如果函数的定义不可用,编译器假定我是一个函数,它接受任意数量的参数并返回int 。 例如,以下编译:

     main(){fgetc(1,2,3,4,5);} 
  2. 至于它们应该声明的位置,它是标题。 当然,不同的C实现可能在其他头文件中包含此头文件,因此代码可能在不包含情况下工作,但是如果您希望在不同的C实现之间编译而没有警告,则应该包含此头文件。

如果函数与正确的参数一起使用,则不需要声明使用函数(但我希望现代C编译器在这种情况下发出警告)。 好像该函数已被声明

 int isalnum(); 

(并不是

 int isalnum(...); 

这不是C – 一个需要至少一个命名的参数 – 如果它是可变参数函数可能使用不同于非变量函数的调用约定。

这仅适用于返回int函数,并且具有未被促销触及的参数(通过促销触及char和short;由于历史原因,标准库中的函数通常在此类中)。