C-隐式声明函数time,rand,printf,我的所有函数调用

时间:2017-02-14 00:34:43

标签: c declaration implicit

这一整天都在吃我。我对C比较陌生,我不能让这个工作,我不知道为什么。我有3个文件..

我也想为间距道歉,因为这是我第一次使用堆栈溢出...但无论如何,这里是代码......

assignment_1.h -------------------------------------------- ---------------

#ifndef ASSIGNMENT_1_H
#define ASSIGNMENT_1_H

#define NULL 0

int CalculateFactorial(int input);
int CalculateFibonacci(int input);
void ReverseArray(int size, int array[]);
void ShuffleArray(int size, int array[]);

#endif

MAIN.C -------------------------------------------- ---------------------------

#include "assignment_1.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int main(){

int fact = CalculateFactorial(15);
int fib = CalculateFibonacci(15);

printf("Factorial: %d\n", fact);
printf("Fib: %d\n", fib);

int array[] = {1,2,3,4,5,6};
int size = 6;

ReverseArray(size, array);
ShuffleArray(size, array);

return 0;


}/*end main*/

assignment_1.c -------------------------------------------- -------------------

#include "assignment_1.h"


int CalculateFactorial(int input){

if(input<=0)    return 0;


int factorial = input;
int multiplier = input;

while(multiplier > 1){
    factorial *= multiplier;
    --multiplier;
}/*end while*/

return factorial;

}/*end calcfact*/



int CalculateFibonacci(int input){

if(input<=0)    return 0;

else if(input == 1)     return 1;

return CalculateFibonnaci(input-1) + CalculateFibonacci(input-2);

}/*end calcfib*/



void ReverseArray(int size, int array[]){

int last = size-1;
int first = 0;
int temp;

while (last-first > 1){     /*stops the loop if size is even*/

temp = array[last];
array[last] = array[first];
array[first] = temp;

++first;
--last;

if(last-first == 2)     break; /*stops loop if size is odd*/

}/*end while*/

int i;
for (i = 0; i< size;++i){
    printf("%d, ",array[i]);
}
printf("\n");

}/*end reverse*/



void ShuffleArray(int size, int array[]){

srand((unsigned int)time(NULL));

int i;
for (i = 0; i < size; ++i){

    int idx = rand()%size; /*random unsigned int between 0 and the 
                        max index of the array*/

    int temp = array[i];
    array[i] = array[idx];
    array[idx] = temp;

}/*end for loop*/

for (i = 0; i< size;++i){
    printf("%d, ",array[i]);
}
printf("\n");

}/*end shuffle*/

我不断收到大量错误,都是警告:隐含声明功能'']

我非常感谢任何帮助...

1 个答案:

答案 0 :(得分:2)

由于您正在将assignment_1.c分别编译为main.c(如果您计划在编译后使用链接器将两者链接在一起,这是合理的),您需要在该文件中包含这些标头,< EM>太;它们不会自动从一个翻译单元转移到另一个翻译单元。

将这些插入到assignment_1.c:

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

我发现了另一个错误,即您在assignment_1.h中指定的NULL的定义; 永远不会自己定义NULL,因为它是标准符号。这就像写自己的printfscanf

NULL<stddef.h>标头中定义。当您想要使用NULL时,也包括这一点。