g++编译C语言函数 混合编程 有点意思??

xxb249 2012-07-31 11:05:15
函数声明:
#ifndef PUB_FUNC_H
#define PUB_FUNC_H

#ifdef __cplusplus
extern "C"
{
#endif

unsigned char *LTrim(unsigned char *str);

#ifdef __cplusplus
}
#endif

#endif


函数实现

unsigned cha *LTrim(unsigned cha *str)
{
unsigned int len = 0;
unsigned int low = 0;

if(NULL == str)
{
printf("The Parameter Is Invalid.pStrTime = NULL.\n");
goto EXIT_LABEL;
}

len = strlen(str);
while((low<len)&&isspace(str[low]))
{
low++;
}
strcpy(str,str+low);

EXIT_LABEL:
return str;
}

然后 g++ ./source/pub_func.c 出现错误!!


source/pub_func.c:41: error: invalid conversion from 'unsigned char*' to 'const char*'
source/pub_func.c:41: error: initializing argument 1 of 'size_t strlen(const char*)'
source/pub_func.c:42: error: 'isspace' was not declared in this scope
source/pub_func.c:46: error: invalid conversion from 'unsigned char*' to 'char*'
source/pub_func.c:46: error: initializing argument 1 of 'char* strcpy(char*, const char*)'
source/pub_func.c:46: error: invalid conversion from 'unsigned char*' to 'const char*'
source/pub_func.c:46: error: initializing argument 2 of 'char* strcpy(char*, const char*)'

strlen 原型 strlen(const char *s);
strcpy 原型 strcpy(char *dest, const char *src);


我也知道 是类型不匹配,但是我的疑问是:
我在声明生的时候 写了 extern "C" 为什么用g++编译的时候还提示 无法类型转换呢??


...全文
296 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxb249 2012-07-31
  • 打赏
  • 举报
回复
恍然大明白了!! 忘记了!!这样似乎没有什么好办法了,只能显示转化了
ri_aje 2012-07-31
  • 打赏
  • 举报
回复
因为 g++ 是 c++ 编译器,c++ 不支持 unsigned char* 到 char* 的隐式类型转换。

64,644

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧