找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 5134|回复: 0

《c专家编程》笔记1

[复制链接]
发表于 2012-1-16 10:23:40 | 显示全部楼层 |阅读模式
来自:http://blog.csdn.net/mingchaoyan/article/details/7203399第一章 C:穿越时空的迷雾Ken Thompson 肯 汤普森  创造了B语言;发明了 ++ 和 -- ;

Dennis Ritchie 丹尼斯 里奇 创造了“New B” 后来改名为 C;

确切得说,UNIX 比C 语言出现得早;
在编译器中,效率几乎就是一切;
C语言排斥强类型;
开始几年C语言的主要客户就是哪些编译器设计者;
auto 关键字显然是摆设,它的意思是“在进入程序块是自动进行内存分配”(与全局静态分配或堆上分配相反)

[html] view plaincopyprint?


  • int f(a)
  •     int a;
  • {
  •     printf("%d",a);
  • }

  • int main () {
  •     int a = 1;
  •     f(a);

  •     return 0;
  • }

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] view plaincopyprint?


  • #include<stdio.h>
  • #include<limits.h>
  • int main() {    (void)printf("biggest int is %d", INT_MAX); return 0;}


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

[cpp] view plaincopyprint?


  • foo(const char **p) {}
  • int main(int argc, char **argv)
  • {
  •     foo(argv);
  • }

foo(const char **p) {}int main(int argc, char **argv) {        foo(argv);}
以上代码是会有警告的;
研究一下获得这个答案的整个过程,会比仅仅知道结论更有意义;
参数传递过程类似于赋值;
赋值必须满足条件之一:左边指针所指向的类型必须具有右边指针所指向类型的全部限定词;
const char * 是类型是“指向一个具有const 限定符的char 类型指针”,也就是说const 限定的是指针所指向的类型,而不是指针本身;
以上代码有警告是因为  char ** 和 const char **不相容;
回首往事,const关键字原先如果命名为readonly就好多了;

[cpp] view plaincopyprint?


  • #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");

  • }

#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 就变成了那个很大正数;




您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-4 16:09 , Processed in 0.013787 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表