我在 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++ 代码。我相信使用gcc或g++应该有所作为,但似乎编译器只考虑文件扩展名。
你能提供一些关于这方面的细节吗?
这是代码 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 也替换了函数调用。似乎内联是自动添加的。
所以在编码时需要内联。