现在的位置: 首页 > 综合 > 正文

12-2-14关于ANSIC标准的预定义宏

2017年11月14日 ⁄ 综合 ⁄ 共 1346字 ⁄ 字号 评论关闭

1      __LINE__                       在源代码中插入当前源代码行号   
      __FILE__                       在源代码中插入当前源代码文件名   
      __DATE__                       在源代码中插入当前编译日期〔注意和当前系统日期区别开来〕   
      __TIME__                       在源代码中插入当前编译时间〔注意和当前系统时间区别开来〕         
      __STDC__                       当要求程序严格遵循ANSIC标准时该标识符被赋值为1。   
      __cplusplus   
  标识符__LINE__和__FILE__通常用来调试程序;   

  标识符__DATE__和__TIME__通常用来在编译后的程序中加入一个时间标志,以区分程序的不同版本;


这里一定要注意 前后均是两个_,别被假象迷惑了。否则引入了stdio.h,编译器也是不认识他们的。

 2关于volatile.

在c中,变量用volatile进行定义,表示告诉编译器,你不 要自作聪明,进行编译优化,(编译器从该变量获取相应的值后,会自作聪明的进行优化,不在访问该变量所在的

内存地址,进行读取变量的数值,而是直接凭借上次的数值再次读取。)

 因此有了volatile,编译器会乖乖的都从该变量存储的地址读取该变量值,保证了变量值的实时。

因此在并行设备的寄存器,中断程序会访问的全局变量,多线程中被共享的变量。

上述的三个场景都是需要我们特别小心的。尽量使用关键字volatile进行修饰。


3关于linux中的数据重定向

1> 以覆盖的方式将正确的数据输出到指定的文件或者设备上

1>>以累加的方式将正确的数据输出到指定的文件或者设备上

2>以覆盖的方式将错误的信息输出到指定的文件或者设备上

2>>以累加的方式将错误的信息输出到指定的文件或者设备上

其中>也为标准输出,默认为1

<为标准输入,默认为0,但是我们可以进行流的重定向。


4关于linux中清空某文本的整个字符

一般我们使用vim编辑器,在一般模式下输入gg,这样会跳到文本的第一行

然后输入dG 就回请空所有字符了。

借鉴另外一位大神的方法,echo > file


4关于线程退出

一般在linux中,涉及多线程的编码问题的时候。

一般主线程会陆续生成子线程来处理相应的内容,默认的线程状态为joinable,如果我们主线程调用pthread_join(pthread_id)来等待这些子线程运行结束,并得到他们的退出吗,进行相应资源的回收。这种思想是完全正确的,但是他是一种阻塞式的等待,如果我们的主线程一直等不到 你执行完成,就一直阻塞在那里。

如果新来一个客户端,需要我们为其创建线程,是完全无法执行下去的。

因此我们采用pthread_detach()

可以在主线程中调用pthread_detach(pthread_id);

或者在子线程中自身调用pthread_detacch(pthread_self());

这个函数的目的是设置了该子线程状态为detached,含义:该子线程运行结束后,会自动释放所有资源





【上篇】
【下篇】

抱歉!评论已关闭.