gpt4 book ai didi

c++ - 可以单独编译任何 .c 文件(也就是说,没有 main?)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:56:59 24 4
gpt4 key购买 nike

我目前有一个“类库”.c 文件(如下所示)。我对此有 2 个问题:

  1. 如果我想看看它自己是否编译良好,我该怎么做?如果我尝试对它进行 gcc,它总是会给出“no main”错误,这是有道理的,但会引发一个问题,即知道给定的 .c 文件是否可以“隔离”编译。我是否可以安全地得出结论,如果编译器引发的唯一错误是“no main”错误,那么我的文件没有问题?在这里单独编译 .c 文件的一个例子是确定哪些包含过多。

  2. 在这样一个简单的文件中是否有必要用它的方法/结构声明定义一个 header ,然后在这样一个很小的 ​​.c 文件中包含代码实现?

    #ifndef SEMAFOROS
    #define SEMAFOROS


    #include <signal.h>
    #include <sys/mman.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <semaphore.h>


    typedef struct {
    sem_t* id;
    char* nome;
    } Semaforo;


    inline void lock(Semaforo* semaforo) {
    sem_wait(semaforo->id);
    }


    inline void unlock(Semaforo* semaforo) {
    sem_post(semaforo->id);
    }


    Semaforo* criarSemaforo(char* nome) {
    Semaforo* semaforo = (Semaforo*)malloc(sizeof(Semaforo));
    semaforo->id = sem_open(nome, O_CREAT, 0xFFFFFFF, 1);
    semaforo->nome = nome;
    }


    void destruirSemaforo(Semaforo* semaforo) {
    sem_close(semaforo->id);
    sem_unlink(semaforo->nome);


    <pre><code>free(semaforo);
    </code></pre>

    }


    #endif

谢谢

最佳答案

在没有链接的情况下编译它(不需要主入口点):

cc -c file.c -o file.o

即使对于定义将从其他源文件调用的例程的小文件,您仍然需要头文件。头文件是编译器在链接器将它们联系在一起之前知道例程接口(interface)的方式。如果您没有外部函数的声明,那么编译器必须对参数的数据类型做出假设(通常是错误的)。您可以在使用它们的每个源文件中声明函数,但头文件的要点是您只需在头文件中声明一次。

关于c++ - 可以单独编译任何 .c 文件(也就是说,没有 main?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4200595/

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