Tag: 包括

多个定义和仅标头库

我有一个带有几个c和h文件的C程序。 我决定将程序的一部分设置为“仅限标题”,因此我将代码从c移到了h。 现在我得到了多重定义问题,我不明白为什么。 例如: main.c includes utils.h vector.c includes utils.h 我将utils.c中的所有内容移动到utils.h(当然从项目中删除了utils.c)。 utils.h以。开头 #ifndef UTILS_H_ #define UTILS_H_ // and end with: #endif 为了确保我的警卫是独一无二的,我尝试改变它(例如:UTILS718171_H_),但它不起作用。 仍然,编译器抱怨: /tmp/ccOE6i1l.o: In function `compare_int’: ivector.c:(.text+0x0): multiple definition of `compare_int’ /tmp/ccwjCVGi.o:main.c:(.text+0x660): first defined here /tmp/ccOE6i1l.o: In function `compare_int2′: ivector.c:(.text+0x20): multiple definition of `compare_int2′ /tmp/ccwjCVGi.o:main.c:(.text+0x6e0): first defined here /tmp/ccOE6i1l.o: In function `matrix_alloc’: ivector.c:(.text+0x40): multiple […]

自动发现C依赖项

我需要为当前项目编写文档,列出所有.c文件,每个文件列出该文件直接或间接包含的每个.h文件。 这是一个大项目,虽然我们有理论上有这些信息的Makefile,但那些Makefile有时是不正确的(我们从另一家公司inheritance了这个项目)。 我们经常不得不做一个make clean ; make make clean ; make我们的更改实际上反映在重新编译中,所以我不想依赖这些Makefile。 那么是否有一个工具可以让我们给它一个.c文件和一个包含路径的名称,让它告诉我们.c文件直接或间接包含的所有.h文件? 我们没有任何奇怪的东西 #define my_include “some_file.h” #include my_include 所以这个工具不需要是完美的。 在常规包含的包含路径中搜索.c和.h文件的任何内容都足够好。

C宏 – 动态#include

我试图弄清楚如何使用GCC为#include语句构建变量字符串。 我的想法是,对于我编写的每个源模块,我希望包含一个动态生成的C源头,它是在构建过程的早期创建的。 生成此文件不是问题。 不幸的是,包括它在内。 到目前为止我所拥有的是(identities.h): // identities.h # define PASTER2(str) #str # define PASTER(str) PASTER2(str ## .iden) # define EVALUATOR(x) PASTER(x) # define IDENTITIES_FILE EVALUATOR(__FILE__) # include IDENTITIES_FILE 理想情况下,这将使用(main.c): //main.c # include “identities.h” int main() {return 0;} 在编译之前,预处理器将在一次传递中扩展为: //main.c (preprocessed) # include “main.c.iden” int main() {return 0;} 我正在使用的两个间接级别(PASTER和EVALUATOR)是这篇文章的结果。 不幸的是,这不起作用,我留下了错误: obj/win32/dbg/main.o In file included from main.c:1:0: […]

C循环依赖

我在C中有循环依赖这个问题,我查看了关于这个主题的其他问题,但实际上找不到答案。 我有第一个名为vertex的结构: #ifndef MapTest_vertex_h #define MapTest_vertex_h #include “edgelist.h” //includes edgelist because it’s needed typedef struct { char* name; float x, y; edgelist* edges; } vertex; #endif 第二个结构是顶点包含的边缘列表。 #ifndef edgelist_h #define edgelist_h #include “edge.h” //include edge, because its needed typedef struct _edgelist { edge** edges; int capacity, size; } edgelist; //… #endif 然后是最后一个结构,即问题引发的结构,边结构包含在上面的边缘列表中。 #ifndef MapTest_edge_h #define […]

如何在C中构造#includes

假设我有一个C程序,它被破坏为一组* .c和* .h文件。 如果一个文件中的代码使用另一个文件中的函数,那么我应该在哪里包含头文件? 在使用该函数的* .c文件中,或在该文件的标题内? 例如,文件foo.c包含foo.h ,其中包含foo.c所有声明; 对于bar.c和bar.h 。 foo.c函数foo1()调用bar1() ,它在bar.h声明并在bar.c定义。 现在问题是,我应该在foo.h包含bar.h还是在foo.c ? 对于这些问题,一套好的经验法则是什么?

有什么好的参考资料记录了在C中使用“.h”文件的模式?

“C接口和实现”显示了数据结构的一些有趣的使用模式,但我确信还有其他的。 http://www.amazon.com/Interfaces-Implementations-Techniques-Addison-Wesley-Professional/dp/0201498413

C #include filename中的连接字符串

当#including文件名(在C中)时,是否可以从另一个宏连接字符串。 例如, 我有, #define AA 10 #define BB 20 这些参数随程序运行而变化 该文件包括: #include “file_10_20” // this changes correspondingly ie file_AA_BB 是否有可能以某种方式拥有#include “file_AA_BB”类的东西? 我用谷歌搜索发现双磅操作符可以连接字符串,但无法找到一种方法。 任何帮助,将不胜感激。

#include c / c ++中的绝对路径语法

出于某种原因,我需要在#include使用绝对路径作为我的系统。 使用#include “D:\temp\temp_lib\temp.h”可以接受吗? 我尝试了这些不同的用法,这一切似乎都有效。 #include “D:\temp\temp_lib\temp.h” #include “D:\\temp\\temp_lib\\temp.h” #include “D:/temp/temp_lib/temp.h” 我只是想知道我应该使用哪一个? 我正在使用MSVC 2005.我想知道这三个是否仍然适用于Linux或其他环境。 我期待#1在编译期间是一个错误,但我没有得到任何错误。 任何人都知道为什么会这样?

为什么get()被弃用?

在我的代码中使用gets()时,编译器会大喊大叫 warning: the ‘gets’ function is dangerous and should not be used.` 和 warning: ‘gets’ is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations] 任何具体原因?

什么是在C(或可能是C ++)中记录X-Macros使用模式的好参考?

C预处理器的维基百科条目中给出了“ X-Macros ”的基本定义和示例以及一些参考: X-Macro是一个头文件(通常使用“.def”扩展名而不是传统的“.h”),它包含一个类似的宏调用列表(可以称为“组件宏”)。 关于如何使用这种强大技术的一些很好的信息来源是什么? 是否有使用此方法的着名开源库?