不包括#include <ctype.h> </ctype.h>

时间:2011-01-10 10:50:14

标签: c header-files

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

1

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

2

#include <stdio.h>
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;
}

2 个答案:

答案 0 :(得分:8)

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

    $ gcc -Wall -o a.c
    a.c: In function ‘main’:
    a.c:4: warning: implicit declaration of function ‘isalnum’
    

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

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

答案 1 :(得分:2)

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

int isalnum();

(而不是

int isalnum(...);

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

这仅适用于返回int的函数,并且具有促销未触及的参数(字符串和短片由促销触及;标准库中的函数通常出于历史原因而在此类中)。