| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2379 人关注过本帖
标题:试着在Linux上编程,有个问题十分不解...
只看楼主 加入收藏
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
结帖率:97.22%
收藏
已结贴  问题点数:30 回复次数:21 
试着在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
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
1、printf非法是因为没有包含头文件吧

2、头文件貌似只编译需要的部分  并不是把整个头文件都编译到exe中

以上2点均是貌似  基础不牢  呵呵


DO IT YOURSELF !
2013-01-06 23:22
神龙赖了
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
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
这和linux有啥关系咧
2013-01-07 11:44
神龙赖了
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
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用神龙赖了在2013-1-7 11:52:03的发言:

因为我是在Linux上写的代码啊...如果是在Windos上写就直接是一个c文件了
话说windos上也能合成的吗?小弟才疏学浅,望指教上面的问题啊,当然这个最好能顺便说明一下...
z版得帮帮忙啊,可不能老是切分啊,会折寿滴...

除了是在linux下做的这个实验 我没看出和linux有啥其他的关系 用微软的编译器也可以这么弄 只不过具体的参数不同罢了

还有头文件的制作是避免重复的定义,那为什么不在main函数中直接定义呢?这样的话既可以不重复定义而且也比较省力


为啥呢 如果有很多头文件 不就乱了 所以要有头文件 所以要防止头文件重复引用

不过你这里的头文件防重复引用弄的是不是不对啊。。。

看看stdio.h里面怎么实现的

程序代码:
#ifndef _STDINT_H
#define _STDINT_H
……这里是省略的意思……
#endif


一般不在头文件里面写printf("……");这样的东西罢
2013-01-07 12:14
神龙赖了
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
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用zklhp在2013-1-7 12:14:08的发言:


除了是在linux下做的这个实验 我没看出和linux有啥其他的关系 用微软的编译器也可以这么弄 只不过具体的参数不同罢了



为啥呢 如果有很多头文件 不就乱了 所以要有头文件 所以要防止头文件重复引用

不过你这里的头文件防重复引用弄的是不是不对啊。。。

看看stdio.h里面怎么实现的


#ifndef _STDINT_H
#define _STDINT_H
……这里是省略的意思……
#endif


一般不在头文件里面写printf("……");这样的东西罢
不过好像你这里不是想实现防重复引用 而是在没有这样编译的时候防止出错? 不知道你咋琢磨出的这个东西。。。
2013-01-07 12:22
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用神龙赖了在2013-1-7 12:21:34的发言:

额,我知道不对了,3楼已经说了是printf函数没有定义,
但是程序没有出错,说明根本没有到void getname(void);
那getname函数岂不是没有定义了吗?那不是会出错吗?
还有像这样的头文件不是一样重复了吗?它们怎么不算重复定义呢?
我彻底混淆了...z版还请继续讲。。。

为啥stdio.h不会重复定义就是因为用了上面的那种宏 你混淆了我也糊涂了 不知道你到底想知道什么 不知道你想干什么。。。
2013-01-07 12:24
快速回复:试着在Linux上编程,有个问题十分不解...
数据加载中...
 
   



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

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