| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2379 人关注过本帖
标题:试着在Linux上编程,有个问题十分不解...
取消只看楼主 加入收藏
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
结帖率:97.22%
收藏
已结贴  问题点数:30 回复次数:11 
试着在Linux上编程,有个问题十分不解...
在Linux中书上一般是由几个c文件链接起来一起生成:
程序代码:
/* myfile.c */
#include <stdio.h>
#include "getname.h"

int main(void)
{
  printf("\r\nplease enter your name:\r\n");
  getname();
  return 0;
}
程序代码:
/* getname.c */
#include <stdio.h>
#include "getname.h"

void getname(void)
{
  char name[28];
  scanf("%s",name);
  printf("\r\nHello %s!\r\n\r\n\r\n",name);
}
程序代码:
/* getname.h */
#ifdef GETNAME_H
#undef GETNAME_H
printf("Error!\r\n");
void getname(void);
#endif
用gcc myfile.c /root/New/getname.c -o myfile.exe -INew生成可运行程序myfile.exe
我链接后运行发现并没有出现错误,可是getname.h头文件中的print("")语句没有输出
那getname.h岂不是没有作用了?
搜索更多相关主题的帖子: return void include Linux 
2013-01-06 21:47
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
还有,如果getname.h改成
#ifndef GETNAME_H
#define GETNAME_H
printf("Error!\r\n");
void getname(void);
#endif

这样好像就错误了,gcc说是printf非法,可是应该不会啊?
当然,主要是上面一个问题

I have not failed completely
2013-01-06 22:08
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
对哦,不能用printf,以前在windos上直接写上了#include <stdio.h>
结果一直没去管它了...
2、头文件貌似只编译需要的部分  并不是把整个头文件都编译到exe中

这里有点疑问,因为如果getname.h头文件中
#ifdef GETNAME_H
#undef GETNAME_H
printf("Error!\r\n");
void getname(void);
#endif

不执行的话getname函数就没有初始化定义了,程序应该会出错的啊?
还有头文件的制作是避免重复的定义,那为什么不在main函数中直接定义呢?这样的话既可以不重复定义而且也比较省力
函数和main函数()中的头文件都会重复,合并时不会出错吗?主要是不懂合并的流程...
Linux刚用,太菜了,求教...

I have not failed completely
2013-01-07 00:19
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
因为我是在Linux上写的代码啊...如果是在Windos上写就直接是一个c文件了
话说windos上也能合成的吗?小弟才疏学浅,望指教上面的问题啊,当然这个最好能顺便说明一下...
z版得帮帮忙啊,可不能老是切分啊,会折寿滴...

I have not failed completely
2013-01-07 11:52
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
额,我知道不对了,3楼已经说了是printf函数没有定义,
但是程序没有出错,说明根本没有到void getname(void);
那getname函数岂不是没有定义了吗?那不是会出错吗?
还有像<stdio.h>这样的头文件不是一样重复了吗?它们怎么不算重复定义呢?
我彻底混淆了...z版还请继续讲。。。

I have not failed completely
2013-01-07 12:21
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
哦,哟西哟西,
但是getname函数在main函数中没有定义啊,那不是会出错?

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

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



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

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