欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

《c专家编程》笔记1

程序员文章站 2022-10-17 22:23:19
第一章 c:穿越时空的迷雾 ken thompson 肯 汤普森  创造了b语言;发明了 ++ 和 -- ; dennis ritchie 丹尼斯 里奇 创造了&ld...

第一章 c:穿越时空的迷雾
ken thompson 肯 汤普森  创造了b语言;发明了 ++ 和 -- ;
dennis ritchie 丹尼斯 里奇 创造了“new b” 后来改名为 c;
确切得说,unix 比c 语言出现得早;

在编译器中,效率几乎就是一切;

c语言排斥强类型;

开始几年c语言的主要客户就是哪些编译器设计者;

auto 关键字显然是摆设,它的意思是“在进入程序块是自动进行内存分配”(与全局静态分配或堆上分配相反)

[html]
int f(a) 
    int a; 

    printf("%d",a); 

 
int main () { 
    int a = 1; 
    f(a); 
 
    return 0; 

原来函数参数还可以这么写;
国际c语言混乱代码大赛(the international obfuscated c code competition)

valve 阀

《the c programing language》 brian kernighan 和 丹尼斯 里奇;

如果人们用日常语言来编写他们,越想把它写得精确,就越可能使他们变得冗长、乏味且晦涩;如果用数学概念来定义语言,那么标准手册对于大多数人而言不啻于天书;

不应该通过修改语言来处理某个特定平台所存在的限制;

从原则上来说,ansi所采纳的c语言标准是iso c,我们日常所说的标准c也应该是iso c;

[cpp]
#include<stdio.h> 
#include<limits.h> 
int main() {    (void)printf("biggest int is %d", int_max); return 0;} 
  
标准化过程非常重视形式,显得僵化;
相邻的字符串字面值会被自动连接在一起;

[cpp]
foo(const char **p) {} 
int main(int argc, char **argv)  

    foo(argv); 

以上代码是会有警告的;
研究一下获得这个答案的整个过程,会比仅仅知道结论更有意义;

参数传递过程类似于赋值;

赋值必须满足条件之一:左边指针所指向的类型必须具有右边指针所指向类型的全部限定词;

const char * 是类型是“指向一个具有const 限定符的char 类型指针”,也就是说const 限定的是指针所指向的类型,而不是指针本身;

以上代码有警告是因为  char ** 和 const char **不相容;

回首往事,const关键字原先如果命名为readonly就好多了;

[cpp]
#include<stdio.h> 
int array[] = {10,0}; 
#define total_elements (sizeof(array)/sizeof(array[0])) 
 
int main(int argc, char **argv)  

    int d = -1; 
 
    if(d <= total_elements) 
        printf("1\n"); 
    else 
        printf("2\n"); 
 

打印出来的是2,因为sizeof结果为unsigned int ,当 int 型的d 和 unsigned int 型之间测试比较时,d被升级为unsigned int 于是 -1 就变成了那个很大正数;

摘自 codeblog