C 如何处理头文件中的函数定义?

C 如何处理头文件中的函数定义?,c,gcc,compilation,compiler-errors,header-files,C,Gcc,Compilation,Compiler Errors,Header Files,是否有任何方法可以在不使用gcc更改文件扩展名或内容的情况下将设计糟糕的头文件编译为目标文件,或者我必须复制/编辑该文件?(这是因为我使用的是公共SDK,即我没有编辑头文件的权限,而且在我的Makefile中使用cp似乎是一个主要的黑客行为,而且非常耗时) 例子 main.c 附录c 使用以下公式编译: $ gcc -o main.o main.c $ gcc -o app.o app.c $ gcc -o main main.o app.o SDK示例程序使用单个对象文件(gcc-o

是否有任何方法可以在不使用gcc更改文件扩展名或内容的情况下将设计糟糕的头文件编译为目标文件,或者我必须复制/编辑该文件?(这是因为我使用的是公共SDK,即我没有编辑头文件的权限,而且在我的Makefile中使用
cp
似乎是一个主要的黑客行为,而且非常耗时)

例子 main.c 附录c 使用以下公式编译:

$ gcc -o main.o main.c
$ gcc -o app.o  app.c
$ gcc -o main   main.o app.o
SDK示例程序使用单个对象文件(
gcc-o main.o main.c&gcc-o main.o
),但在我的例子中,这会变得非常混乱。

创建

_print.h

int print(char* str);
print.cpp

#include <print.h>
#包括

并将您的include更改为
“\u print.h”

print
功能至少有三种不同的方式不正常。扔掉它,不要回头看。@KerrekSB我希望你意识到,
print
函数只是一个例子?“…将一个设计糟糕的头文件编译成一个对象文件…”-这已经没有什么意义了。头文件不应该被编译成目标文件,不管它们是否设计糟糕。那么,你想做什么?你真的想把头文件编译成目标文件吗?需要吗?@yoyonny您的要求意味着您不能多次包含print.h。您可以在新的静态文件中创建声明,并将其包括在内。
#ifndef PRINT_H
#define PRINT_H

int print(char* str) {
    printf(str);
    return 0;
}

#endif
$ gcc -o main.o main.c
$ gcc -o app.o  app.c
$ gcc -o main   main.o app.o
int print(char* str);
#include <print.h>