我试图通过将命令行参数传递给函数来填充全局int变量。当我这样做时,我收到警告(见下文),以及一个时髦的返回号码(例如52而不是预期的49)。
任何提示都将不胜感激。这是硬件 - 但只是整个任务的一小部分。
#include <stdio.h>
#include <stdlib.h>
#include "kangarooHeaders.h"
int numJoeys = MIN_NUM_LEGAL_JOEYS - 1;
int main (int argc, char* argv[])
{
initializeNumJoeys(argc,argv);
printf("%d", numJoeys);
}
void initializeNumJoeys(void argc, void *argv[])
{
char line[LINE_LEN];
if (argc > MAMAS_NUM_JOEYS_CMD_LINE_INDEX)
numJoeys = *argv[1];
}
argv_test.c:13: warning: conflicting types for ‘initializeNumJoeys’
argv_test.c:9: warning: previous implicit declaration of ‘initializeNumJoeys’ was here
答案 0 :(得分:3)
将其置于main()
函数
void initializeNumJoeys(int argc, char *argv[]);
原因是隐式函数声明,编译器没有找到initializeNumJoeys()
的原型并隐式声明为
int initializeNumJoeys();
所以当它找到定义时,它就与之前的声明相冲突。
另外,请更改此
numJoeys = *argv[1];
到
numJoeys = strtol(argv[1], NULL, 10);
并且,函数签名错误
void initializeNumJoeys(void argc, void *argv[])
/* ^ should be int */
所以将其改为
void initializeNumJoeys(int argc, void *argv[])
不要忘记修复原型。