函数名也会出错???

feny911 2006-04-15 01:20:11
/* ttt.c */
char ttt(char);

char gettext(char);

char getext(char);

上面是完整的ttt.c源码。

$gcc -S ttt.c
ttt.c:4: error: nonnull argument references non-pointer operand (arg 1, operand 1)
ttt.c:4: error: nonnull argument references non-pointer operand (arg 1, operand 1)

谁能告诉我char gettext(char);这个声明有什么问题吗?

起因:
今天维护自己写的库。其中有一个char *getline()用于从stdio接受一个以'\n'结束的字符串。
基于通用性方面的考虑,改为char *gettext(char endch),接受一个以endch或EOF结束的字符串。之后问题就来了。
为了找出出错位置,写了上面的ttt.c,确认问题出在函数名上。

困扰我的问题是,gettext并不是保留字,应该说我的声明完全是合法的。同时ttt.c没有包含任何头文件,即使在某处有函数同名,应该也不会发生冲突才对。

感谢
...全文
509 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
feny911 2006-04-29
  • 打赏
  • 举报
回复
还是没能得到想要的答案
其实在提问前就已经通过改函数名解决问题了,我只想知道为什么。

算了,过完五一结帖。每个人都有分。
mLee79 2006-04-26
  • 打赏
  • 举报
回复
试试 char getext(char c );
niatclock 2006-04-26
  • 打赏
  • 举报
回复
ttt.c:4:error: nonnull argument references non-pointer operand (arg 1, operand 1)

错误:非零变量引用非指针操作(变量1,操作1)

也就是说您的有值变量作为指针被引用,我不知说的是否有道理
feny911 2006-04-26
  • 打赏
  • 举报
回复
如果是冲突,哪位老大能给说一下,这种冲突在什么样的情况下会发生?
比如说如果我做了个aaa库放到系统中,别人是不是就不能用aaa做函数名了?

另请帮忙翻译一下下面的错误信息:
ttt.c:4:error: nonnull argument references non-pointer operand (arg 1, operand 1)
我总感觉自己可能理解错了。
谢谢
ManZY 2006-04-16
  • 打赏
  • 举报
回复
我怀疑,gettext是通过宏来定义的,也就是在不同的编译环境下,实际连接的函数不同,在你定义的那个函数当中用到了这个名字,被编译器展开了,然后他会解释成宏参数不同.

个人猜测.
chenhu_doc 2006-04-15
  • 打赏
  • 举报
回复
恩,这个程序在不同的环境下就可能有不同的反应了,看看在turboc中怎么样,应该是没有问题的·》·》·· 确实

gettext 通过在消息列表中查找,来将一种自然语言的消息翻译成用户的本地语言。 gettextize 拷贝所有的gettext文件到软件包的顶层目录下,以便于开始翻译。


在linux环境下,gettext肯定是不能用来做自己的变量名的。。。 建议换一个·_getttext
jinjiajie 2006-04-15
  • 打赏
  • 举报
回复
....只能改名字了
OOPhaisky 2006-04-15
  • 打赏
  • 举报
回复
同意楼上的说法,函数名字冲突,楼主改一个名字,看看怎么样。
jixingzhong 2006-04-15
  • 打赏
  • 举报
回复
看提示应该是函数名字冲突 ...

这个和楼主你的环境有关系,
看是否已经有这个函数存在 ....

改个名字应该可以了 ...
getext ==》getextline
chenhu_doc 2006-04-15
  • 打赏
  • 举报
回复
不是什么霸道的问题,系统中本来就有这个东西了,你还。。。。。。。。。。。。
谁会把老子的名字给儿子用···
sankt 2006-04-15
  • 打赏
  • 举报
回复
看来是函数命名冲突了
Yofoo 2006-04-15
  • 打赏
  • 举报
回复
是不是你声明了函数没定义?
feny911 2006-04-15
  • 打赏
  • 举报
回复
首先感谢大家热心答疑

gettext先于我的程序存在,这个我已经知道了。但是我并没有把它包含进来。
如果是函数名字冲突,在我的环境下会有明确的“conflicting”提示。
下面是另一个文件:

#include <stdio.h>
void malloc(char * c)
{
printf("%s\n", c);
}
int main()
{
char * c = "Hello!";
malloc(c);
return 0;
}

运行正常,没有任何问题。难道gettext就这么霸道,比malloc还利害?
leaway211 2006-04-15
  • 打赏
  • 举报
回复
函数命名冲突?
dch4890164 2006-04-15
  • 打赏
  • 举报
回复
呵呵
改一下名字不就可以了嘛!
yuanchuang 2006-04-15
  • 打赏
  • 举报
回复
gettext是一个著名的文本文件处理库,你这个函数名和人家的冲突了。
--------------------------------------------------
楼上连这都知道?强!
herryhuang 2006-04-15
  • 打赏
  • 举报
回复
gettext是一个著名的文本文件处理库,你这个函数名和人家的冲突了。

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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