C99内联,为什么我们不能继续使用它?

问题描述 投票:0回答:2

我刚刚了解到内联使我的代码在使用函数时速度更快,但是我想知道为什么我们不内联每个函数,以通常的方式编写函数的目的是为什么我们拥有如此强大的关键字(我知道编译器选择是否内联函数,但是建议内联每个函数会更好)?

加上:使用Clion,我试图内联以下函数,但出现错误:

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


inline double maxf(int a,int b)
{
    if (a>b)
        return a;
    return b;
}

int main() {
    clock_t begin = clock();
    double arr[999999]={0};
    double max=arr[0];
    arr[9898]=99999999;
    for (int i=1;i<999999;i++)
    {
            max=maxf(arr[i],max);
    }
    clock_t end = clock();
    double time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
    printf("%lf",time_spent);
    return 0;
}

[ 50%] Building C object CMakeFiles/untitled.dir/main.c.o
[100%] Linking C executable untitled
Undefined symbols for architecture x86_64:
  "_maxf", referenced from:
      _main in main.c.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [untitled] Error 1
make[2]: *** [CMakeFiles/untitled.dir/all] Error 2
make[1]: *** [CMakeFiles/untitled.dir/rule] Error 2
make: *** [untitled] Error 2

有关导致此问题的原因的任何想法?

c compilation c-preprocessor inline c99
2个回答
1
投票
在该程序上收到链接器错误的原因是,您的程序使用了数学库中的函数maxf,并且未与-lm链接。这仅在某些优化级别上发生。

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.