如何使用单个头文件将C实现文件拆分为多个文件

时间:2015-01-30 23:16:46

标签: c++ c g++

我有一个C / C ++应用程序,带有头文件/实现文件对。

在:


// ===================================================
// Filename:         "bitwise.cpp"
// ===================================================
// --> "C" specific headers:
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>
// ===================================================
// --> same header:
#include "bitwise.hpp"
// ===================================================

uint8_t byte_and
  (uint8_t A, uint8_t B)
{
  return (A & B);
} 

uint16_t word_and
  (uint16_t A, uint16_t B)
{
  return (A & B);
} 

uint32_t dword_and
  (uint32_t A, uint32_t B)
{
  return (A & B);
} 

// other function's implementations

// ===================================================

// ===================================================
// Filename:         "bitwise.hpp"
// ===================================================
#ifndef BITWISE__HPP
#define BITWISE__HPP
// ===================================================
// --> "C" specific headers:
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>
// ===================================================
// --> same header:
// ???
// ===================================================

uint8_t byte_and
  (uint8_t A, uint8_t B);

uint16_t word_and
  (uint16_t A, uint16_t B);

uint32_t dword_and
  (uint32_t A, uint32_t B);

// other function's prototypes

// =================================================== 
#endif // BITWISE__HPP
// =================================================== 

主文件类似于:


// ===================================================
// Filename:         "main.cpp"
// ===================================================
// --> "C" specific headers:
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>
// ===================================================
// --> myapp headers:
#include "bitwise.hpp"
// ===================================================

int main(int argc, char** argv) 
{
    int ErrorCode = 0;

    // ...

    uint8_t A = 7;
    uint8_t B = 5;
    uint8_t C = byte_and(A, B);

    // ...

    uint16_t A = 7;
    uint16_t B = 5;
    uint16_t C = word_and(A, B);

    // do something else

    // ...

    uint32_t A = 7;
    uint32_t B = 5;
    uint32_t C = dword_and(A, B);

    // do something else

    // ...

    return ErrorCode;
} // int main(...)

// ===================================================

由于“bitwise.cpp”变得太大,我想把它拆分成几个“* .cpp”文件。

并保留一个“bitwise.hpp”文件, 并且还想要主文件,而不必包含每个特定的实现“* .cpp”文件。

之后(想要实现类似的东西):


// ===================================================
// Filename:         "bitwise_byte.cpp"
// ===================================================
// --> "C" specific headers:
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>
// ===================================================
// --> same header:
#include "bitwise_byte.hpp"
// ===================================================

uint8_t byte_and
  (uint8_t A, uint8_t B)
{
  return (A & B);
} 

// other function's implementations

// ===================================================

// ===================================================
// Filename:         "bitwise_word.cpp"
// ===================================================
// --> "C" specific headers:
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>
// ===================================================
// --> same header:
#include "bitwise_word.hpp"
// ===================================================

uint16_t word_and
  (uint16_t A, uint16_t B)
{
  return (A & B);
} 

// other function's implementations

// ===================================================

// ===================================================
// Filename:         "bitwise_dword.cpp"
// ===================================================
// --> "C" specific headers:
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>
// ===================================================
// --> same header:
#include "bitwise_dword.hpp"
// ===================================================

uint32_t word_and
  (uint32_t A, uint32_t B)
{
  return (A & B);
} 

// other function's implementations

// ===================================================

// ===================================================
// Filename:         "bitwise.hpp"
// ===================================================
#ifndef BITWISE__HPP
#define BITWISE__HPP
// ===================================================
// --> "C" specific headers:
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>
// ===================================================
// --> same header:
// ???
// ===================================================

// include smaller implementation files here (maybe):

// include "bitwise_byte.cpp" or "bitwise_byte.hpp"
// include "bitwise_word.cpp" or "bitwise_word.hpp"
// include "bitwise_dword.cpp" or "bitwise_dword.hpp"

// =================================================== 
#endif // BITWISE__HPP
// =================================================== 

我没有使用名称空间或外部变量或类声明,只使用全局函数。每个单独的实现“* .cpp”文件, 独立于其他人。

我希望主文件保持不变,而不必修改其中的“include”。可以更改单个“* .cpp”文件,也可以更改“* .hpp”。

可以这样做吗? 因为,if (CanBeDone == TRUE),怎么办?

我试着查看以前的帖子,但是,没有找到答案。

[注意:我没有完成这个问题,我已经有3张投票,没有解释,看起来像拖钓]

2 个答案:

答案 0 :(得分:2)

只需将所有函数原型添加到bitwise.hpp,并将其包含在需要任何函数的所有文件中。

答案 1 :(得分:0)

这是如何运作的,使用@Ari Malinen的想法,以防有人可能需要它:


// ===================================================
// Filename:         "bitwise_byte.cpp"
// ===================================================
// --> "C" specific headers:
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>
// ===================================================
// --> same header:
#include "bitwise_byte.hpp"
// ===================================================

uint8_t byte_and
  (uint8_t A, uint8_t B)
{
  return (A & B);
} 

// other function's implementations

// ===================================================

// ===================================================
// Filename:         "bitwise.hpp"
// ===================================================
#ifndef BITWISE__HPP
#define BITWISE__HPP
// ===================================================
// --> "C" specific headers:
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>
// ===================================================
// --> same header:
// ???
// ===================================================

uint8_t byte_and
  (uint8_t A, uint8_t B);

uint16_t word_and
  (uint16_t A, uint16_t B);

uint32_t dword_and
  (uint32_t A, uint32_t B);

// other function's prototypes

// =================================================== 
#endif // BITWISE__HPP
// =================================================== 

// ===================================================
// Filename:         "bitwise.cpp"
// ===================================================
// --> "C" specific headers:
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>
// ===================================================
// --> same header:
#include "bitwise.hpp"
// ===================================================

// Implementation of functions removed.

// ===================================================

“bitwise _ * .cpp”文件,例如“bitwise_byte.cpp”,从项目中删除。 “mainfile.cpp”保持不变。

使用了诸如“bitwise_word.cpp”之类的其他文件,但是,示例中没有出现,以避免使示例难以阅读。

我想避免放置函数原型,而是使用include声明,但是,似乎是不可能的。