调用外部代码

时间:2013-09-16 06:42:36

标签: c++

是否可以从记事本等外部文件中调用例程(如果需要,还可以调用cpp文件)?

e.g。 我有3个文件。 MainCode.cpp

SubCode_A.cpp< - 未包含在MainCode.cpp的标题中

SubCode_B.cpp< - 未包含在MainCode.cpp的标题中

MainCode_A.cpp

  #include <iostream>
  using namespace std;

  int main ()
  {

  int choice = 0;
  cin >> choice;

  if (choice == 1)

  {

  "call routines from SubCode_A.cpp;" <- is there a possible code for this?

  }

  else if (choice == 2)

  {

  "call routines from SubCode_B.cpp;" <- is there a possible code for this?

  }

  return 0;
  }

=================================

SubCode_A.cpp CODES

  {
  if (1) //i need to include if statement :)
        cout >> "Hello World!!";

  }

=================================

SubCode_B.cpp CODES

  {

  if (1) //i need to include if statement :)
        cout >> "World Hello!!";

  }

4 个答案:

答案 0 :(得分:0)

将代码设为例如SubCode_A.cpp 函数,然后在主源文件中声明此函数并调用它。您当然必须使用所有源文件构建以创建最终的可执行文件。

答案 1 :(得分:0)

没有

你必须编译两个代码, 在标头中声明外部函数(例如extern void function (int);)。 编译将包含此标头的两个文件。 然后在第3个文件中,您使用它只需包含标题。

但是当您在编辑中包含所有3个文件时,它将起作用。

这篇文章可能很有用:Effects of the extern keyword on C functions

答案 2 :(得分:0)

您可以使用#include语句。 Include指示编译器在#include点插入指定的文件。 所以你的代码将是

if (choice == 1)
{
    #include "SubCode_A.cpp"
}
...

你不需要SubCode _?。cpp文件中的额外大括号,因为它们存在于MainCode.cpp中

当然,编译器只会在编译时编译SubCode文件中的内容。对未编译的源的任何更改都不会以可执行文件结束。

但是中间源#includes不适用于非常易读的代码。

答案 3 :(得分:0)

无法在另一个可执行文件中调用代码。一个应用程序可以通过库或DLL公开“api”(应用程序编程接口),允许您调用应用程序使用的一些代码。

在编译您的代码时,编译器需要知道您要调用的函数的“指纹”:即返回的内容以及所需的参数。

这是通过声明或“原型存根”完成的:

// subcode.h
void subCodeFunction1(); // prototype stub
void subCodeFunction3(int i, int j);

// subcode.cpp
#include <iostream>

void subCodeFunction1()
{
    std::cout << "subCodeFunction1" << std::endl;
}

void subCodeFunction2()
{
    std::cout << "subCodeFunction2" << std::endl;
}

void subCodeFunction3(int i, int j)
{
    std::cout << "subCodeFunction1(" << i << "," << j << ")" << std::endl;
}

// main.cpp
#include "subcode.h"

int main() {
    subCodeFunction1(); // ok
    subCodeFunction2(); // error: not in subcode.h, comment out or add to subcode.h
    subCodeFunction3(2, 5); // ok
    return 0;
}