放错误或警告信息(外部变量)

时间:2014-02-08 00:57:05

标签: c gcc

我的a.c文件:

int sum(int a, int b) {
    return a + b;       
}

我的b.c文件:

#include<stdio.h>                                                                                                                       
extern int sum(int, int);
int main() {
    printf ("%d", sum(2, 3));
    return 0;
}

gcc a.c b.c -o输出,工作正常。

明天我说,我通过将参数增加到三来改变“a.c文件”和函数的定义。像这样,

int sum(int a, int b, int c) {
    return a + b + c;       
}

但是忘了改变b.c文件中的用法(意味着我还在使用两个变量)

gcc a.c b.c -o输出(不给出编译错误或警告mssg,printf给出错误答案,显然)

现在考虑我正在处理大量的c文件,我无法创建新的头文件,因为它会产生不必要的依赖问题,这可能需要很长时间才能解决。

如果在参数方面更改了extern原始定义,抛出错误甚至警告消息的最佳方法是什么?

此致

3 个答案:

答案 0 :(得分:2)

  

如果extern原始定义在参数方面发生变化,抛出错误甚至警告消息的最佳方法是什么?

编译器和链接器都不会反对。当程序停止工作时,您将在运行时(如果幸运的话)找到答案。

如果这是C ++,那么名称修改将允许链接器拒绝这种错误形成的程序。但是,对于C,链接器只需要找到具有正确名称的符号。它无法检查签名。

使用头文件是让编译器确保您正确执行操作的可接受方法。在整个程序中反复重复函数声明通常是一个非常糟糕的主意。与您提出的方法相比,您认为使用标题文件的任何缺点都显得微不足道。

如果您根本不使用头文件,那么您必须始终是正确的!

答案 1 :(得分:1)

通常编辑器(SourceInsight,Sublime)可以选择浏览符号。通过使用此选项,您可以轻松找到函数调用和原型。

编译器永远不会为您的问题生成警告或错误。自己包含的头文件是避免这种情况的最佳选择。

答案 2 :(得分:0)

最好的办法是尽量避免使用“extern”并包含sum()的头文件。使用头文件和原型设计功能将有助于编译器捕获这些问题。

test.c的:

#include <stdio.h>
#include "math.h"

int main(void)
{
    printf("%d", sum(2, 3));
    return 0;
}

math.h中:

int sum(int a, int b, int c)
{
    return (a + b + c);
}

输出:

~]$ gcc test.c -o test
test.c: In function ‘main’:
test.c:6:5: error: too few arguments to function ‘sum’
     printf("%d", sum(2, 3));
     ^
In file included from test.c:2:0:
math.h:1:5: note: declared here
 int sum(int a, int b, int c)