Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用C++;以独立的方式从C开始 我有一个用C++编写的内核尝试,我想把它移植到X8664 64 UEFI,但是使用GNU EFI LIB的EFI引导装载器必须用C.< /P>来编写。_C++_C - Fatal编程技术网

调用C++;以独立的方式从C开始 我有一个用C++编写的内核尝试,我想把它移植到X8664 64 UEFI,但是使用GNU EFI LIB的EFI引导装载器必须用C.< /P>来编写。

调用C++;以独立的方式从C开始 我有一个用C++编写的内核尝试,我想把它移植到X8664 64 UEFI,但是使用GNU EFI LIB的EFI引导装载器必须用C.< /P>来编写。,c++,c,C++,C,如何从C跳转到主内核函数?使用外部c>代码>所有方式都使得C++特性不可能使用,也许可以使用一些汇编代码,或者我可以让引导加载程序调用ELF文件,这是一个ELF加载程序的主要内核。这种解决方案可行吗 使用外部c一路使C++特性不可能使用 没有。在标题中写“代码>外部”C“,并用C++编译器编译函数,并在单独的翻译单元中使用各种C++特性,是没有问题的。 你只需要避免C++名称的限制,以实现你的入口函数的C++实现。这就是extern“C”所做的,如果您将其用于函数声明 下面是一个小例子: ke

如何从C跳转到主内核函数?使用<代码>外部c>代码>所有方式都使得C++特性不可能使用,也许可以使用一些汇编代码,或者我可以让引导加载程序调用ELF文件,这是一个ELF加载程序的主要内核。这种解决方案可行吗

使用<代码>外部c<代码>一路使C++特性不可能使用

没有。在标题中写“代码>外部”C“<代码>,并用C++编译器编译函数,并在单独的翻译单元中使用各种C++特性,是没有问题的。 <>你只需要避免C++名称的限制,以实现你的入口函数的C++实现。这就是
extern“C”
所做的,如果您将其用于函数声明


下面是一个小例子:

kernel.h
kernel.cpp
bootloader.c

extern“C”void kernel_main(){…}
?@Someprogrammerdude不完全正确。在这种情况下,需要将声明和定义分开。@因此,更重要的是总体思路。不必比这更复杂。此外,如果在定义时没有声明,那么也需要声明。我没有投反对票,但在问这个问题之前,你真的应该理解
extern C
的作用。如果它只是意味着“开始像C编译器一样到处运行”,它为什么会在C++中存在呢?
extern "C" void main_entry_point();
#include "kernel.h"

void main_entry_point() {
    // use std::string, std::vector, etc.
}
#include "kernel.h"

// call main_entry_point()
main_entry_point();