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。
|
|
|
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上也能照样跑,这就是向后兼容的重 : 要性。
|
|
|
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文件
|
|
|
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();
} |