【发布时间】:2014-04-30 11:03:42
【问题描述】:
我正在使用 allegro 编写 C 应用程序,我需要一些 C++ 功能 所以我使用 extern "C" 为我的函数编写了一个 C/C++ 接口 但它给了我很多关于这些函数的隐式声明的警告
这是我在 lists.h 中的代码
#ifndef LISTS_HPP_INCLUDED
#define LISTS_HPP_INCLUDED
#include "entities.h"
#include "engine.h"
#ifdef __cplusplus
extern "C"
{
int cloneList_size(void);
int colList_size(void);
int scene_size(void);
void cloneList_clear(void);
void colList_clear(void);
void scene_clear(void);
void push_back_cloneList(Object *object);
void push_back_colList(t_collision *col);
void push_back_scene(Object *object);
void remove_cloneList(Object *object);
void remove_scene(Object *object);
Object* Scene(int nbr);
Object* CloneList(int nbr);
t_collision* ColList(int nbr);
}
#endif // __cplusplus
#endif // LISTS_HPP_INCLUDED
这是我在 lists.cpp 中的代码
#include "lists.h"
#include <iostream>
#include <vector>
#include <stdexcept>
std::vector<Object *> scene;
std::vector<t_collision *> colList;
std::vector<Object *> cloneList;
int cloneList_size(void)
{ //..
}
//And all other functions here
我的 main.c 中不能包含 lists.h 或者我有一个错误,因为 C 编译器无法识别 extern "C" 部分
如果我不包含lists.h,它可以工作,但有许多函数警告的隐式声明..
我使用的是 Codeblocks 13.12,但当我在谷歌上搜索我的问题时,我不知道如何启用另一个论坛中有人建议的 C++ 编译选项。
我做错了什么,我应该怎么做才能纠正这些警告..
【问题讨论】:
-
extern "C"在哪里?编译器的错误和警告信息是什么? -
extern "C" 仅与 C++ 相关 - C 不需要它。您需要保护源文件顶部和底部的#ifdef __cplusplus 中的外部“c”。
-
我已经完成了......现在我可以包含我的头文件,但我仍然有警告
-
然后我们需要查看您的 C 源代码。除非您在使用定义后包含该文件,否则您应该不会遇到此问题。
标签: c++ c interface compiler-warnings extern