C语言之c语言基础知识

作者: 榆西带你飞 | 来源:发表于2019-06-09 15:10 被阅读1次
0.jpg

1,“\”引起的错误:

在我们现在的编译器中如果写下面这段程序

int main() {
    
    // create file in c:\
    ofstream outupt("test.txt");
    
}

编译就会用字符的颜色来提示我们,这两行内容都被当做了注释的内容,但是如果在vim下编写程序,就不会出现代码颜色不一样的问题,导致程序出错,是什么原因呢,是因为""的问题,它在c++或者python语言中,代表的含义都是本行尚未结束,下一行仍和本行是一个整体,所以编译器会认为,两行都是注释,最终导致错误。

2, 想想这个表达式: y = x/p 他的结果是什么呢? 有可能是x的值除以p的值的结果赋给y,但是在实际编译中会出错,为什么? 因为编译器会把 /当成注释的开始,之后的内容都是注释,但是要结束注释需要找到匹配的/,但是没有找到,所以编译会出错。如果向改正程序的话,在/, * 之间加一个空格,或者给他们加一个(),就解决了。

3, #define PCHAR char*

  PCHAR p1, p2;

  typedef char* pchar;

  pchar p3, p4;

那sizeof p1, p2, p3, p4都是什么呢,结果是4, 1, 4, 4,结果很奇怪吧,原因要追溯到编译器对#define的处理,是对#define定义的东西在预编译的时候进行替换,也就是说真正编译的时候是这个样子 char * p1, p2;这样该明白p2的值是1的原因了吧。

4,enum enum_value {

VALUE_ONE,

VALUE_TWO,

VALUE_THREE,

}enum_val;

测试一下sizeof enum_val的值,看是多少,你会发现是4,其实这个原因很简单,enum 定义的变量只是一个UINT类型,而它生命的VALUE_ONE,VALUE_TWO, 只是enum变量的取值范围而已,所以enum不是像struct那样是个结构体,它表示的只是一个集合。

5, #define,因为在预编译的时候就会做替换,所以他不会导致不必要的内存分配。同时宏看起来像一个函数,但不会招致函数调用不必要的开销。

在定义宏的时候,必须记住为所以得实参加上小括号,但即使加上了小括号,也会遭遇麻烦:

define CALL_WITH_MAX(a, b) f((a) > (b) ? (a) : (b))

看看下面的调用:

int a = 5, b = 10

CALL_WITH_MAX(++a, b)

CALL_WITH_MAX(++a, b + 10) 把实参替换一下就可以看到,a的递增次数取决于它被拿来和谁比较。

6, int a[6], sizeof(a[6]) 为什么不会出错? 因为sizeof 是一个关键字,关键字求值是在编译的时候,虽然并不存在a[100]这个元素,但是这里并没有真正的去访问a[6], 而是仅仅根据数据元素的类型确定其值。 那么函数引用a[6]就会出错,是因为函数求值是在运行的时候。

如果你依然在编程的世界里迷茫,不知道自己的未来规划,对C/C++感兴趣,这里推荐一下我的学习交流圈:149889655,里面都是学习C/C++的,从最基础的C/C++【C/C++,游戏,黑客技术,网络安全,数据挖掘,爬虫】到网络安全的项目实战的学习资料都有整理,送给每一位C/C++小伙伴,希望能帮助你更了解C/C++,学习C/C++

点击:https://dwz.mn/hZ7Y

相关文章

  • iOS开发系列文章[转]

    C语言 iOS开发系列--C语言之基础知识 iOS开发系列--C语言之数组和字符串 iOS开发系列--C语言之指针...

  • iOS开发系列文章[转]

    文章转自某大神博客,侵权删 C语言 iOS开发系列--C语言之基础知识iOS开发系列--C语言之数组和字符串iOS...

  • C语言之c语言基础知识

    1,“\”引起的错误: 在我们现在的编译器中如果写下面这段程序 编译就会用字符的颜色来提示我们,这两行内容都被当做...

  • 1212笔记

    C基础c语言之父丹尼斯 里奇C语言的优缺点:优点:缺点:1.C语言的引入------hello,world!#in...

  • CC++语言0|C和C++的联系与区别

    1 C语言 C语言之所以命名为C,是因为 C语言源自Ken Thompson发明的B语言,而 B语言则源自BCPL...

  • 【解密】C语言和C++的简要历史,你是否有了解?

    C语言的历史 C语言之所以命名为C,是因为 C语言源自Ken Thompson发明的B语言,而 B语言则源自BCP...

  • 一小段C语言代码!为何都说牛逼?

    C语言之所以命名为C,是因为 C语言源自Ken Thompson发明的B语言,而 B语言则源自BCPL语言。 ...

  • 12.12c语言

    C基础c语言之父丹尼斯 里奇C语言的优缺点:优点:功能强大缺点: 1.C语言的引入------hello,worl...

  • 一、本文集内容

    学啥 1.计算机基础知识(c语言相关的)2.C语言基础3.C语言进阶4.C语言小项目 学习教材-C语言编程: 一本...

  • C语言基础知识记录

    C语言基础知识记录

网友评论

    本文标题:C语言之c语言基础知识

    本文链接:https://www.haomeiwen.com/subject/dehnxctx.html