【问题标题】:Linking multiple .c files链接多个 .c 文件
【发布时间】:2014-03-23 21:04:20
【问题描述】:

我有一个名为 first.c 的 C 文件,我在其中定义了一个数组并调用了一个在名为 second.c 的 C 文件中定义的函数。这是 first.c 的外观:

int main(void)
{
    int array[100];
    myFunc(*array);
}
另一方面,

second.c 看起来像这样:

void myFunc(int array)
{
    ...
}

但是每当我尝试编译这些时,second.c 都会给我错误,就好像它不知道我作为参数传递给它的函数的数组一样。我猜该函数在链接阶段不知道这一点。我是这样编译的:

gcc -O2 -std=c99 -Wall -pedantic -lm second.c -c
gcc -O2 -std=c99 -Wall -pedantic first.c -c
gcc second.o first.o -o finished

但这正是我想出的,当然它不起作用。我想 Makefile 会到位,但我不确定如何实现它。

【问题讨论】:

    标签: c linker makefile


    【解决方案1】:

    您的问题可能在于接收到的值不是指针,因此请将 void myFunc(int array) 更改为 void myFunc(int* array)。

    【讨论】:

    • 很好,解决了问题。但是如果我想保留void myFunc(int array),我应该从 first.c 传递什么给函数?
    • @imre 你应该试试myFunc(array); 但不要这样做。 array 作为指针而不是整个对象传递是有原因的。如果参数不是指针,那么您正在复制整个数组,这不是您想要的。
    • 当我这样做时,gcc 在多行上给了我这个错误:error: subscripted value is neither array nor pointer nor vector,所以我想我应该按照你的方式去做。
    • @imre 不要用myFunc(array);替换函数声明,像这样调用myFunc:myFunc(array);。
    • 这是函数声明:void myFunc(int pole);,我用myFunc(pole);调用它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多