php 企业网站cms,网站 二级分类,58同城网站建设思路,昆明网红打卡景点C/C语言中#xff0c;如何在main.cpp中调用另一个.c文件主要有5种思路#xff1a; 1、在VS2012 IDE中#xff0c;将被引用的.c文件后缀名全部修改为.h#xff0c;然后通过IDE的解决方案资源管理器中鼠标右键单击“头文件”-添加-“现有项”#xff0c;选中修改… C/C语言中如何在main.cpp中调用另一个.c文件主要有5种思路 1、在VS2012 IDE中将被引用的.c文件后缀名全部修改为.h然后通过IDE的解决方案资源管理器中鼠标右键单击“头文件”-添加-“现有项”选中修改后缀名后的.h文件-添加将待引用的文件添加到工程中。 添加到“头文件”而不是“源文件”的作用主要是使头文件的项类型属性为“C/C 标头”而不是“C/C 编译器”。后者是将该文件独立编译成目标文件*.obj。用户可右键单击某个.h文件-属性-配置属性-常规-项类型来查看。 接着在main.cpp文件中包含所需要使用头文件 #include 13lman.h 然后在需要的地方直接调用该函数即可如下 jslman(3,1,200,f,q,r,h,y,x,p,g); 2、不用修改文件扩展名直接将待引用的.c文件添加到“源文件”下面按照1的步骤将待引用的文件的项类型“修改为“C/C 标头”。该方法的本质是将*.c文件当做*.h使用。如下图所示 接着在main.cpp文件中包含所需要使用.c文件 #include 13lman.c 然后在需要的地方直接调用该函数即可如下 jslman(3,1,200,f,q,r,h,y,x,p,g); 3、首先在IDE中右键选中头文件-添加-新建项-Visual C-头文件(.h)-输入文件名创建新的.h文件。如下图所示 接着在function.h文件来声明这些待调用的函数 #ifndef __FUNCTION_H__
#define __FUNCTION_H__int rinv(double a[],int n);int lman(int n,int m,int k,double f[],double q[],double r[],double h[],double y[],double x[],double p[],double g[]);
#endif 然后按照2中的步骤将待引用的.c文件添加到源文件节点下面。将其项类型设置为“C/C 编译器”预编译头设置为“不使用预编译头”。如下图所示 接下来在待引用的.c文件中包含function.h头文件貌似这一步不用也可以编译-链接-运行成功??? #include function.h 紧接着在主调用文件main.cpp中文件中包含待引用的.c文件 #include 13lman.c 最后在需要的直接调用该函数即可如下 jslman(3,1,200,f,q,r,h,y,x,p,g); 4、如果main.cpp需要调用的.c文件还需要依赖其它.c文件则可以按照下图所示的方法设置各个文件的编译属性 前提是所有的.c文件添加到“源文件”节点下面将其项类型设置为“C/C 编译器”预编译头设置为“不使用预编译头”除了最后一个.c文件。 接着在主调用文件main.cpp中文件中包含待引用的.c文件 #include 13lman.c 然后在13lman.c文件中包含所依赖的4rinv.c文件 #include 4rinv.c 最后在需要的直接调用该函数即可如下 jslman(3,1,200,f,q,r,h,y,x,p,g); 5、 所有的.c文件添加到“源文件”节点下面将其项类型设置为“C/C 编译器”预编译头设置为“不使用预编译头”。如果直接编译-链接会输出“error LNK2019: 无法解析的外部符号”链接错误。 问题原因C语言和C语言混编因为C支持函数重载所以C编译器生成的库文件中的函数名会面目全非例如C编译器会生成 _readRegmark 这个函数名而C编译器则生成了void __cdecl readRegmark(char *) (?readRegmarkYAXPADZ)这么个函数名。当你的函数是用C语言写的VS编译器会按C语言规则编译但链接器却不知道还傻傻的用C规则的函数名去找当然就找不到了。 解决办法在C语言的头文件或主动调用的main.cpp文件的最开始部分加入如下代码 #ifdef __cplusplus
extern C {
#endifvoid readRegmark(char *regmark); //这里写函数声明
#ifdef __cplusplus
}
#endif 或者更简洁一些 extern C
{int lman(int n,int m,int k,double f[],double q[],double r[],double h[],double y[],double x[],double p[],double g[]);
} 这样的话就可以编译-链接成功了。上面的解决办法适用于待调用的.c文件中的函数还依赖于其他文件中的其它函数的情况。如果主动调用文件main.cpp还需要使用其它.c文件的函数也可以用同样的方法解决。推荐使用第一种方法。因为第一种方法既能够让.cpp文件能够包含这个.c文件又能让其它.c文件能够包含这个.c文件。需要注意的是:__cplusplus是C编译器内置的宏。 对OpenGL比较熟悉的用户可能会发现在OpenGL的头文件GL.h中的开头和结尾部分就使用了上面的用法如下图所示 开头部分 结尾部分 参考链接 1、同一个C语言工程不同C文件之间的函数互相调用问题(一)、同一个C语言工程不同C文件之间的函数互相调用问题(二)、同一个C语言工程不同C文件之间的函数互相调用问题(三) 2、C语言一个源文件如何调用另一个源文件里的函数 3、C语言为什么无法include另一个源代码文件 4、cpp到obj再到exe重定义的问题 5、C/C不同文件夹下包含头文件的方法及#include的使用 6、“error LNK2019: 无法解析的外部符号”之分析 7、碰到“error LNK2019: 无法解析的外部符号” 8、3.C和C混合编程 转载于:https://www.cnblogs.com/rainbow70626/p/8744933.html