由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - c++头文件太tmd恶心了
相关主题
C 里面有办法永久改变一个指针的属性吗?inline method
基础问题:在header里面define function怎样include一个函数
C++ Q07: unnamed namespace一道面试怪题C++. (转载)
《新C++标准:C++0x 概述》英文文字版[PDF]One question in C programming
C++ online Test 又一题 (转载)Help C++ Template function link error .
这个function pointer最后的那个int是什么意思?global variable usage question in C++
C or C++ testWhy should i include .cpp instead of .h
forward declaration[菜鸟问问题]请问如果有两个 C++ library
相关话题的讨论汇总
话题: void话题: functiona话题: functionb话题: class话题: java
进入Programming版参与讨论
1 (共1页)
N******K
发帖数: 10202
1
互相引用这种事情 稍不留意 就出问题
forward declare 有时候也不太好用
v******y
发帖数: 84
2
你才有体会?这个dependency的东西很多时候很难的,
makefile简直是古董
这个head file 本身是门“没有用的屠龙技术”
对于没有学过编译过程的新人简直是噩梦

【在 N******K 的大作中提到】
: 互相引用这种事情 稍不留意 就出问题
: forward declare 有时候也不太好用

d****i
发帖数: 4809
3
这个不至于,Makefile几十年来从各种UNIX用到Linux基本没有变过,一旦掌握很好用
,也很轻巧灵便,这个就是Makefile的长久的魔力所在。header file没有什么magic,
就是注意一些常见的规则就可以了。反倒是那些基于GUI的project file,既不直观,
也不portable。

【在 v******y 的大作中提到】
: 你才有体会?这个dependency的东西很多时候很难的,
: makefile简直是古董
: 这个head file 本身是门“没有用的屠龙技术”
: 对于没有学过编译过程的新人简直是噩梦

n*****t
发帖数: 22014
4
没写 #ifdef 吗?

【在 N******K 的大作中提到】
: 互相引用这种事情 稍不留意 就出问题
: forward declare 有时候也不太好用

v******y
发帖数: 84
5
现在不是有pragma once

【在 n*****t 的大作中提到】
: 没写 #ifdef 吗?
v******y
发帖数: 84
6
我咋觉得是没有创新,和java比比如何

【在 d****i 的大作中提到】
: 这个不至于,Makefile几十年来从各种UNIX用到Linux基本没有变过,一旦掌握很好用
: ,也很轻巧灵便,这个就是Makefile的长久的魔力所在。header file没有什么magic,
: 就是注意一些常见的规则就可以了。反倒是那些基于GUI的project file,既不直观,
: 也不portable。

n*****t
发帖数: 22014
7
一个 header 有多个 copy 的时候会有问题,还是 ifndef 实在

【在 v******y 的大作中提到】
: 现在不是有pragma once
d****i
发帖数: 4809
8
不用创新,也没有必要。Makefile对于C/C++在Unix/Linux下面就是最好的工具,Java
也没有变化,比如Maven一直在用。没有变化就最好的最有魅力的,像有的东西今天这
样,明天那样,后天又废掉另外一个就是灾难。

【在 v******y 的大作中提到】
: 我咋觉得是没有创新,和java比比如何
N******K
发帖数: 10202
9
没写 #ifdef 这是新手才做的事情
我说的是 类A 用了类B , 类B 用了类A
这种互相引用的问题

【在 n*****t 的大作中提到】
: 没写 #ifdef 吗?
N******K
发帖数: 10202
10
用cmake 就行了
生成的makefile 里面啥东西 我从来不看

【在 d****i 的大作中提到】
: 这个不至于,Makefile几十年来从各种UNIX用到Linux基本没有变过,一旦掌握很好用
: ,也很轻巧灵便,这个就是Makefile的长久的魔力所在。header file没有什么magic,
: 就是注意一些常见的规则就可以了。反倒是那些基于GUI的project file,既不直观,
: 也不portable。

相关主题
这个function pointer最后的那个int是什么意思?inline method
C or C++ test怎样include一个函数
forward declaration一道面试怪题C++. (转载)
进入Programming版参与讨论
g*****g
发帖数: 34805
11
语言的东西,往里加容易,往外拿是很难的,你不能说legacy代码不编译了,也不能指
望第三方代码一定会跟着新版升级。

【在 v******y 的大作中提到】
: 我咋觉得是没有创新,和java比比如何
d****i
发帖数: 4809
12
对的,所以说像C, C++, Java这种老牌的保守主义的语言是最有生命力的。当然,现在
由于年轻人左逼多了,所以开始在C++11和Java 8上玩火,实际上是完全不需要的。

【在 g*****g 的大作中提到】
: 语言的东西,往里加容易,往外拿是很难的,你不能说legacy代码不编译了,也不能指
: 望第三方代码一定会跟着新版升级。

N******K
发帖数: 10202
13
你不用shared_ptr unique_ptr ?

【在 d****i 的大作中提到】
: 对的,所以说像C, C++, Java这种老牌的保守主义的语言是最有生命力的。当然,现在
: 由于年轻人左逼多了,所以开始在C++11和Java 8上玩火,实际上是完全不需要的。

d****i
发帖数: 4809
14
我C++用的不多,要用的话也一般就用裸指针,哈哈。

【在 N******K 的大作中提到】
: 你不用shared_ptr unique_ptr ?
N******K
发帖数: 10202
15
那就别装专家

【在 d****i 的大作中提到】
: 我C++用的不多,要用的话也一般就用裸指针,哈哈。
d****i
发帖数: 4809
16
不是装,本来就是低手。。

【在 N******K 的大作中提到】
: 那就别装专家
w**z
发帖数: 8232
17
至少Java 是backward compatible, Java 6 build 的war, 扔到Java7 上,也能跑。

【在 d****i 的大作中提到】
: 对的,所以说像C, C++, Java这种老牌的保守主义的语言是最有生命力的。当然,现在
: 由于年轻人左逼多了,所以开始在C++11和Java 8上玩火,实际上是完全不需要的。

d****i
发帖数: 4809
18
是啊,不要说Java 6, 就是Java 1的, 扔到Java 7上也能照样跑,这就是向后兼容的重
要性。

【在 w**z 的大作中提到】
: 至少Java 是backward compatible, Java 6 build 的war, 扔到Java7 上,也能跑。
N********n
发帖数: 8363
19

HOHOHOHO...

【在 d****i 的大作中提到】
: 是啊,不要说Java 6, 就是Java 1的, 扔到Java 7上也能照样跑,这就是向后兼容的重
: 要性。

b***i
发帖数: 3043
20
I approve this message.
曾经有幸读到Java团队的人在96年写的代码,仍然可以运行。当然,有很多warning,
deprecated什么的,但是可以编译运行。

【在 d****i 的大作中提到】
: 是啊,不要说Java 6, 就是Java 1的, 扔到Java 7上也能照样跑,这就是向后兼容的重
: 要性。

相关主题
One question in C programmingWhy should i include .cpp instead of .h
Help C++ Template function link error .[菜鸟问问题]请问如果有两个 C++ library
global variable usage question in C++弱问c++里有没有NULL这个keyword?
进入Programming版参与讨论
w***x
发帖数: 105
21
具体说说forward declare什么时候不好用?
这种问题和c++无关,是头文件没有设计好。
x****u
发帖数: 44466
22
Linux内核本身就不用Make,用的是自己的子系统包装在make下面。
make的就是古董加垃圾,历史原因导致的必须存在,早被包装的面目全非了。

【在 d****i 的大作中提到】
: 这个不至于,Makefile几十年来从各种UNIX用到Linux基本没有变过,一旦掌握很好用
: ,也很轻巧灵便,这个就是Makefile的长久的魔力所在。header file没有什么magic,
: 就是注意一些常见的规则就可以了。反倒是那些基于GUI的project file,既不直观,
: 也不portable。

S*A
发帖数: 7142
23
你说的是 KBuild 吧,那个是用 make 来实现的。
有很多 KBuild 标准语法里面实现不了的东西,还是用 make
实现的。例如 arch/x86 下面就有很多 make 的语法。这个
根本是包不住的。
应该倒过来说,Linux 内核的 KBuild 是用 make 来实现的。

【在 x****u 的大作中提到】
: Linux内核本身就不用Make,用的是自己的子系统包装在make下面。
: make的就是古董加垃圾,历史原因导致的必须存在,早被包装的面目全非了。

N******K
发帖数: 10202
24
类A
{
functionA(类B b)
{
b.print()
}
};
类B
{
functionB(类A a)
{
a.print()
}
};

【在 w***x 的大作中提到】
: 具体说说forward declare什么时候不好用?
: 这种问题和c++无关,是头文件没有设计好。

v******y
发帖数: 84
25
同一个head file,这样不就行了
class B;
class A
{
public:
void functionA(B b);
void print(){
}
};
class B
{
public:
void functionB(A a);
void print(){
}
};
cpp file中
#include "headexp.h"
void A::functionA(B b)
{
b.print();
}
void B::functionB(A a)
{
a.print();
}

【在 N******K 的大作中提到】
: 类A
: {
: functionA(类B b)
: {
: b.print()
: }
: };
: 类B
: {
: functionB(类A a)

N******K
发帖数: 10202
26
如果是多个类互相用 难道搞一个超级头文件?

【在 v******y 的大作中提到】
: 同一个head file,这样不就行了
: class B;
: class A
: {
: public:
: void functionA(B b);
: void print(){
: }
: };
: class B

v******y
发帖数: 84
27
c++不是一个文件一个class,本来就是class(es), function(s), global variable混
看看iostream 有多少 class?

【在 N******K 的大作中提到】
: 如果是多个类互相用 难道搞一个超级头文件?
N******K
发帖数: 10202
28
你直说 是不是得搞一个超级头文件?

【在 v******y 的大作中提到】
: c++不是一个文件一个class,本来就是class(es), function(s), global variable混
: 看看iostream 有多少 class?

v******y
发帖数: 84
29
对啊,可以这样,最好都是declare
所有definition,包括static variable在cpp文件

【在 N******K 的大作中提到】
: 你直说 是不是得搞一个超级头文件?
N******K
发帖数: 10202
30
这种怎么维护?
两个人写两个类 但是都要修改同一个头文件

【在 v******y 的大作中提到】
: 对啊,可以这样,最好都是declare
: 所有definition,包括static variable在cpp文件

相关主题
请教关于link error (C++)的基本问题基础问题:在header里面define function
class D:public B;C++ Q07: unnamed namespace
C 里面有办法永久改变一个指针的属性吗?《新C++标准:C++0x 概述》英文文字版[PDF]
进入Programming版参与讨论
v******y
发帖数: 84
31
这和其他语言一样,头文件就是提供一个一个class declaration
你只要修改自己的class declaration就行了,先当于semi API
这个包装不如只提供API的语言

【在 N******K 的大作中提到】
: 这种怎么维护?
: 两个人写两个类 但是都要修改同一个头文件

N******K
发帖数: 10202
32
两个人改一个文件 用git岂不得冲突 merge?

【在 v******y 的大作中提到】
: 这和其他语言一样,头文件就是提供一个一个class declaration
: 你只要修改自己的class declaration就行了,先当于semi API
: 这个包装不如只提供API的语言

d****i
发帖数: 4809
33
make是最好的工具,新手一开始可能会觉得make难,但是一旦掌握里面的窍门以后就豁
然开朗,对认识code的build步骤很有帮助,就如庖丁解牛一般。

【在 x****u 的大作中提到】
: Linux内核本身就不用Make,用的是自己的子系统包装在make下面。
: make的就是古董加垃圾,历史原因导致的必须存在,早被包装的面目全非了。

v******y
发帖数: 84
34
是啊,必须merge 时先同步,看那些是要的修改。
看注释了,别人改别人的class,和你无关,你就承认修改

【在 N******K 的大作中提到】
: 两个人改一个文件 用git岂不得冲突 merge?
x****u
发帖数: 44466
35
make的问题不是难,而是太简陋了。。。
这种东西就和C语言一个时代,现在地球没几个正经项目可以靠make构建。

【在 d****i 的大作中提到】
: make是最好的工具,新手一开始可能会觉得make难,但是一旦掌握里面的窍门以后就豁
: 然开朗,对认识code的build步骤很有帮助,就如庖丁解牛一般。

w***x
发帖数: 105
36
相互引用可以这么处理下:
a.h:
class B;
class A {
...
void callB(B b);
};
#include "b.h"
inline void A::callB(B b){
b.xxxx();
}
b.h:
class A;
class B {
...
void callA(A a);
};
#include "a.h"
inline void B::callA(A a){
a.xxxx();
}
1 (共1页)
进入Programming版参与讨论
相关主题
[菜鸟问问题]请问如果有两个 C++ libraryC++ online Test 又一题 (转载)
弱问c++里有没有NULL这个keyword?这个function pointer最后的那个int是什么意思?
请教关于link error (C++)的基本问题C or C++ test
class D:public B;forward declaration
C 里面有办法永久改变一个指针的属性吗?inline method
基础问题:在header里面define function怎样include一个函数
C++ Q07: unnamed namespace一道面试怪题C++. (转载)
《新C++标准:C++0x 概述》英文文字版[PDF]One question in C programming
相关话题的讨论汇总
话题: void话题: functiona话题: functionb话题: class话题: java