看以前自己写的一篇文章时有感: https://yonghaowu.github.io//2018/03/05/C_is_not_easy/ 萌新一个,抛砖引玉,欢迎 v 友指点
/* #include <stdio.h> */
/* #include <malloc.h> */
int main(){
char *c = malloc(10);
c[0] = 'a';
printf("hi, ");
printf("%s\n", c);
free(c);
return 0;
}
为什么这个程序缺了头文件, 依然可以正常编译运行, 并且有正确的结果?
/* #include <stdio.h> */
/* #include <malloc.h> */
/* #include <assert.h> */
int main(){
char *c = malloc(10);
c[0] = 'a';
printf("hi, ");
printf("%s\n", c);
assert(c[0] >= 0.0);
free(c);
return 0;
}
为啥这个程序, 加了 assert 又不行了呢?
那为什么 assert 就不行了呢? 因为 assert 是一个宏,而不是函数,所以编译器不会像上述那样去处理。当没有引入 assert.h, 编译器便当它是函数来处理,最终 stdlib 里也找不到 assert 这个函数,就报错了。
1
innoink 2018-09-29 17:24:14 +08:00 via Android 5
根据你说的,我得到的结论是,c 语言是一个充满历史包袱的语言
|
2
LuffyGu 2018-09-29 17:26:28 +08:00 5
你要战,便作战。
PHP 是世界上最好的语言! |
3
changhe626 2018-09-29 17:48:40 +08:00
你要战,便作战。
PHP 是世界上最好的语言! |
4
Chowe 2018-09-29 17:51:02 +08:00
人生苦短,我用 python
|
5
RobertYang 2018-09-29 17:51:58 +08:00 via Android 1
TNT !启动!
|
6
will0404 2018-09-29 17:53:34 +08:00 via iPhone 4
读一遍 CSAPP,这都不算啥了。
|
8
GTim 2018-09-29 18:02:44 +08:00 2
看到这个帖子的第一直觉,难道不是编译原理、操作系统和计算机体系结构太难,所以有了 C 语言
|
9
supuwoerc 2018-09-29 18:16:52 +08:00
越底层越难,人生苦短,我用地摊语言 js~
|
11
Raisu 2018-09-29 18:29:19 +08:00 via Android
@583376938 内功都是假的,Milo Yip 那个书单第一部分我都看完了还是不在公司蹲坑,会套路才是真。
|
12
hmzt 2018-09-29 19:24:31 +08:00
只是写起来繁琐,难在哪呢
|
13
sbw 2018-09-29 19:30:39 +08:00
printf 明明是 int __cdecl printf(const char *format, ...);
|
14
ChristopherWu OP |
15
ChristopherWu OP @sbw 大佬说的对。。
|
16
zhzer 2018-09-29 20:13:23 +08:00 via Android 2
我用 python 我骄傲,我给项目打包票 耶
>> UnicodeDecodeError |
17
luozic 2018-09-29 20:14:51 +08:00 via iPhone
你这是要撸通用库? 一般的不都是撸个特定硬件和系统环境的软件或者直接就是硬件绑定的驱动,哪需要撸那没多,并且一般这种不是上 C++么?
|
18
zaqmjuop 2018-09-29 21:02:36 +08:00 via Android 3
汇编是一个更难,更高端的语言
|
20
courage007 2018-09-29 21:09:33 +08:00 via Android
是不是编译器预制了一个头文件,然后即使没有手动引用也不会报错?
|
21
crist 2018-09-29 21:28:08 +08:00
人生苦短,我用胶水语言 Python~
|
23
d18 2018-09-29 22:00:34 +08:00
我喜欢 C 语言,简单明了,没有黑魔法。
|
25
newtype0092 2018-09-29 22:16:17 +08:00
@zjsxwc 别的时髦语言使用了魔术道具,自己拿来学学就能露两手,C 是直接当着你的面玩无影手,原理全部告诉你,看完还是一脸懵逼。。。
|
26
zwh2698 2018-09-29 22:21:36 +08:00 via Android 1
瞎说,谭浩强的二级 c 语言书中前面几章就有讲这个问题。
|
27
bobuick 2018-09-29 22:34:18 +08:00
c 光语法对话,很简单了。
难的是,习惯了 web 开发的高级语言,各种库拿来操一下就出成果了。换成 C,操一个月不一定出来。 |
28
xiyiailoli 2018-09-29 22:47:47 +08:00 via Android
⊙∀⊙!差不多同意,我学了操作系统后也有这种感觉,但现在有精力研究 c 还不如去 c++吧
|
30
xeaglex 2018-09-30 00:12:32 +08:00
我觉得是你没有习惯而已,C 的设计还是非常简洁优雅的,不像 CPP
|
32
inoki 2018-09-30 01:33:17 +08:00 via Android
手动 at 一下正在学的 x86 asm 和 arm 汇编😂
|
33
Raisu 2018-09-30 07:49:09 +08:00 via Android
@ChristopherWu 什么叫理解?我还见过看完做完 算法导论 所有习题也只有几 K 的人啊
|
34
kljsandjb 2018-09-30 08:18:02 +08:00 via iPhone
内功不是看书看的,看完书把习题做好 lab 吃透才算有效果
|
35
ww2000e 2018-09-30 08:30:45 +08:00 via Android
c 少个结束符啊,s%凑巧给你打出来了
|
36
cgpiao 2018-09-30 08:41:53 +08:00 via iPhone
我选 php 和 kotlin
python 用着好难受,标准库用起来更糟心 |
38
cangshui 2018-09-30 09:21:07 +08:00 via Android
小爱同学,帮我做一下 c 语音课后习题
|
39
Chenamy2017 2018-09-30 09:31:45 +08:00
学好 C 语言,就能理解计算机很多根本的问题了!
|
42
visionsmile 2018-09-30 09:45:46 +08:00 1
C89 具有函数的隐式声明:
[ISO/IEC 9899:1990 6.3.2.2] If the expression that precedes the parenthesized argument list in a function call consists solely of an identifier. and if no declaration is visible for this identifier, the identifier is implicitly declared exactly as if. in the innermost block containing the function call. the declaration ```c extern int idenfifrer () ; ``` 然而这个特性 C99 就废除掉了: [ISO/IEC 9899:1999 Foreword] - remove implicit function declaration |
43
likaka 2018-09-30 11:16:18 +08:00
在 java 面前,c 就是个土老帽
|
45
HidingKing 2018-09-30 15:48:49 +08:00
write once,run anywhere
|