【问题标题】:Multiple C Source Files in CLionCLion 中的多个 C 源文件
【发布时间】:2020-05-22 13:51:42
【问题描述】:

在一个 CLion 项目中,我有两个 C 语言源文件,“main.c”和“list.c”。

源文件“main.c”有这个:

#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}

源文件“list.c”有这个:

#include <stdio.h>

int printFoo() {
    printf("I want Krabby Patties!\n");
    return 0;
}

现在我如何从main() 函数调用printFoo()?我知道我不能在 main.c 中执行 include&lt;list.c&gt;,因为这会导致多重定义错误。

【问题讨论】:

  • 在你的 C book 中查找头文件。
  • 实际上,我很确定您完全可以做到这一点,除非它是#include "list.c"。但斯蒂芬是对的;学习如何使用头文件。

标签: c clion


【解决方案1】:

CLion 使用 CMake 组织和构建项目。

CMakeLists.txt 包含构建说明。

命令add_executable(program main.c list.c) 使用文件main.clist.c 创建可执行文件。将所有源文件添加到其中。您可以添加标题,但这不是必需的。

头文件包含函数的定义和其他东西,实现的源文件,但你可以合并它们。


main.c

#include "list.h"

int main() {
    printFoo();
    return 0;
}

list.h

#pragma once
int printFoo();

list.c

#include "list.h"
#include <stdio.h>

int printFoo(){
    return printf("I want Krabby Patties!\n");
}

#pragma once tels 编译器包含一次头文件。如果您在一个文件中包含多个不包含 #pragma once 的文件,您会发现错误。

【讨论】:

    【解决方案2】:

    你可以创建一个头文件“list.h”

    #ifndef __LIST_H__
    #define __LIST_H__ 
    
    int printFoo();
    
    #endif
    

    然后将其包含在main.c:

    #include <stdio.h>
    #include "list.h"
    
    int main() {
        printf("Hello, World!\n");
        printFoo();
        return 0;
    }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多