小编Pau*_*ang的帖子

为什么文件扩展名对编译有影响?

我在 CentOs8 下用 GNU 编译器编译这段代码:

#include <stdlib.h>

int main() {
    int *a = malloc(3 * sizeof(int));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我将它命名为a.cpp 时,两个编译命令都失败了:

g++ -o a a.cpp
gcc -o a a.cpp
Run Code Online (Sandbox Code Playgroud)

但是在我将其重命名为ac 后,此编译命令成功:

gcc -o a a.c
Run Code Online (Sandbox Code Playgroud)

这是 C 代码,而不是 C++ 代码。我相信使用gccg++应该有所作为,但似乎编译器只考虑文件扩展名。

你能提供一些关于这方面的细节吗?

c c++ gcc

2
推荐指数
1
解决办法
115
查看次数

内联仍然是必要的,因为编译器会自动内联

这是代码 a1.cpp

#include <stdio.h>

void func(void)
{
        printf("hello world\n");
}

int main()
{

        func();
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是代码a2.cpp

#include <stdio.h>

inline void func(void)
{
        printf("hello world\n");
}

int main()
{

        func();
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

它们仅与关键字“内联”不同

然后我将它们编译成汇编

g++ -S a1.cpp
g++ -S a2.cpp
Run Code Online (Sandbox Code Playgroud)

结果是:内联不起作用。函数调用保留在 main 中。

然后我用优化器编译它们

g++ -O2 -S a1.cpp
g++ -O2 -S a2.cpp
Run Code Online (Sandbox Code Playgroud)

结果是:inline 在 a2.s 中有效,但 a1.s 也替换了函数调用。似乎内联是自动添加的。

所以在编码时需要内联。

c++ gcc

0
推荐指数
1
解决办法
119
查看次数

标签 统计

c++ ×2

gcc ×2

c ×1