| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2379 人关注过本帖
标题:试着在Linux上编程,有个问题十分不解...
只看楼主 加入收藏
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
哦,哟西哟西,
但是getname函数在main函数中没有定义啊,那不是会出错?

I have not failed completely
2013-01-07 12:27
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
程序代码:
/* getname.h */
#ifdef GETNAME_H
#undef GETNAME_H
printf("Error!\r\n");
void getname(void);
#endif


你这里的逻辑是 如果定义了 就取消定义 而你这个程序里面没有定义 所以 不会有效

如果你改成ifndef 没定义才执行 那就出错

关键还是看你想干什么 不知道你这代码打哪看的。。
2013-01-07 12:27
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用神龙赖了在2013-1-7 12:27:09的发言:

哦,哟西哟西,
但是getname函数在main函数中没有定义啊,那不是会出错?

1 在main()里面写其他函数的定义是错误的 至少是不规范的 函数是独立的 只有调用的关系 没有包含的关系 这是C的基础

2 为啥不会出错 你看看你的编译参数咋写的。。
2013-01-07 12:29
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
/root/New/getname.c

还有 嗯 你直接用root了 很厉害嘛

据说这样不安全 不过我一直这么用得。。。
2013-01-07 12:30
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
自己稀里糊涂撞出来的...
我的意思是printf下面一句
void getname(void);
这一句是定义getname函数用的,如果没有执行它的话就相当于没有初始化getname函数啊?
貌似是吧...

I have not failed completely
2013-01-07 12:30
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
哦,这样啊。。。
可是...可是什么去了啊...

I have not failed completely
2013-01-07 12:32
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
哦对了,可是getname.h头文件也执行不到它定义的地方啊,那不就根本没有它的定义了?
看来我是问上瘾了...

I have not failed completely
2013-01-07 12:34
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:30 
以下是引用神龙赖了在2013-1-7 12:30:33的发言:

自己稀里糊涂撞出来的...
我的意思是printf下面一句
void getname(void);
这一句是定义getname函数用的,如果没有执行它的话就相当于没有初始化getname函数啊?
貌似是吧...

严格来说是声明罢 定义和声明的区别谭浩强书里都有

比如你这里 如果要防重复引用可以这样

程序代码:
/* getname.h */
#ifndef GETNAME_H
#define GETNAME_H
void getname(void);
#else
#warning 出错了哦 貌似重复引用了诶 快给zklhp分
#endif


程序代码:
/* myfile.c */
#include <stdio.h>
#include "getname.h"
#include "getname.h"

int main(void)
{
    printf("\r\nplease enter your name:\r\n");
    getname();
    return 0;
}



故意重复引用 看会怎么样呢

gcc -Wall myfile.c getname.c -o myfile.exe
In file included from myfile.c:4:0:
getname.h:6:2: warning: #warning 出错了哦 貌似重复引用了诶 快给zklhp分 [-Wcpp]

还有啊 linux里不需要用.exe 作为后缀。。
2013-01-07 12:38
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
额,又学到一点,只可惜不是我要的那一点...
好吧,就说得干脆一点
#include "getname.h"
把所有文件中的这一行代码去掉,文件照常可以正常运行,这是为啥捏?
看你这么猴急就先给了分吧,先说好啊,给了可不许跑啊...

I have not failed completely
2013-01-07 12:49
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
我擦,不会跑了吧?这神马情况?
别啊,说明白点c版上还有20分啊...

I have not failed completely
2013-01-07 12:54
快速回复:试着在Linux上编程,有个问题十分不解...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016129 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved