gpt4 book ai didi

c - 包含与主 c 文件位于同一文件夹中的 C 文件

转载 作者:行者123 更新时间:2023-11-30 14:43:01 25 4
gpt4 key购买 nike

我有一个包含 3 个文件的文件夹:

  • main.c
  • 文件1.c
  • 文件2.c

这个想法是根据符号(无论是否定义)仅编译一个文件。

在 main.c 中,我添加了以下几行:

#ifdef MY_SYMBOL
#include "file1.c"
#else
#include "file2.c"
#endif

我发现的问题是,当定义 MY_SYMBOL 时,file1.c 被编译两次,因为在 makefile 中提到编译每个文件夹内的所有源文件。

限制是我不应该修改makefile!因此,为了避免这种情况,我将 file1.cfile2.c 的扩展名修改为 file1.hfile2.h 分别保留它们的内容(所有私有(private)函数的定义),我更新了 main.c 的内容如下:

#ifdef MY_SYMBOL
#include "file1.h"
#else
#include "file2.h"
#endif

考虑到上述限制,最后一个建议是最好的方法吗?

请注意,file1.cfile2.c 包含相同的函数,但实现不同。

最佳答案

除此之外,C 程序员通常不希望出现以下情况之一:

  1. .h-包含函数实现或变量定义的文件
  2. .c-包含的文件。

所以我想说,通过这两种方式,你都会以某种方式让别人“惊讶”。

如果您不能更改 makefile(顺便说一句:为什么?),您可以将实现变体封装在预处理器指令内的 .c 文件中:

// file1.c  (OR: file_mysym_implementation.c):
#ifdef MY_SYMBOL
// code goes here
#endif

// file2.c (OR: file_non_mysym_implementation.c):
#ifndef MY_SYMBOL
// code goes here
#endif

此外,您还需要一个头文件来声明相应实现公开的所有函数。

关于c - 包含与主 c 文件位于同一文件夹中的 C 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54196644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com