Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么C编译时()没有它的库?_C++_C_Gcc_G++_Time.h - Fatal编程技术网

C++ 为什么C编译时()没有它的库?

C++ 为什么C编译时()没有它的库?,c++,c,gcc,g++,time.h,C++,C,Gcc,G++,Time.h,当我使用time()函数(即,只对rand()随机种子)但不包括头文件time.h时,它适用于C。例如: #include <stdio.h> #include <stdlib.h> int main() { int i; srand(time(NULL)); for(i=0;i<10;i++){ printf("\t%d",rand()%10); } printf("\n"); return 0; } 它与gcc的版本有关,还

当我使用
time()
函数(即,只对
rand()
随机种子)但不包括头文件
time.h
时,它适用于C。例如:

#include <stdio.h>
#include <stdlib.h>

int main()
{
  int i;
  srand(time(NULL));

  for(i=0;i<10;i++){
    printf("\t%d",rand()%10);
  }
  printf("\n");
  return 0;
}
它与gcc的版本有关,还是只是C/C++之间的差异?

您应该包括并打开警告。在C语言中,一个没有可见原型的函数被假定为返回
int
(自C99以来一直被弃用)。因此,使用
gcc
编译似乎不错,而
g++
则不行

编译时使用:

gcc -Wall -Wextra -std=c99 -pedantic-errors file.c
你会看到gcc也抱怨它。

C89/C90(通常被错误地称为“ANSIC”)有一个“隐式
int
”规则。如果调用没有可见声明的函数,编译器将有效地创建一个隐式声明,假设该函数接受调用中出现的类型的参数并返回
int

time
函数接受类型为
time\u t*
的参数,并返回类型为
time\u t
的值。所以我打了个电话

time(NULL)
在没有可见声明的情况下,编译器将生成代码,就像它接受了
NULL
(可能是
int
)类型的参数一样,并返回
int
结果。给定

srand(time(NULL))
time(NULL)
返回的值将从
int
隐式转换为`unsig>

如果
int
time\u t
time\u t*
都恰好是32位,那么调用可能会工作。如果它们的大小不同,

#include
IIRC
stdlib.h
不保证包含
time.h
;C++和C版本不同,因为那里使用条件宏。也许这与此有关。顺便说一下,在C++中使用<代码> >代码>和<代码> >代码>(或者更好的C++标题)(如果你不知道),在C99中没有禁止“隐式<代码> int >代码>,它完全被删除了。在C99及更高版本中,调用没有可见原型的函数是违反约束的行为,需要进行诊断。(默认情况下,GCC不符合C99。)
srand(time(NULL))