随笔分类 - C
摘要:一 提两个简单问题: 下面代码在64位系统下运行,short 类型占两个字节,int类型占4个字节,long类型占8个字节, 猜猜问题1与问题2的结果: 问题1:以下两个代码的输出结果相同吗 代码一: 代码二: 问题2:以下的代码输出结果又是否相同? 代码三: 代码四: 二 猜对答案了没? 1. 问
阅读全文
摘要:推荐: C语言中内存分配 Linux size命令和C程序的存储空间布局 本大神感觉,上面的链接的内容,已经很好的说明了; 总结一下: 对于一个可执行文件,在linux下可以使用 size命令列出目标文件各部分占的字节数;分为:text段、data段与bss段;(参考:Linux size命令和C程序的存储空间布局) 对于一个可执行文件,它的存储空间包括: 1. 代码区(text segme...
阅读全文
摘要:如果尔等之辈问本大神,为什么需要头文件呢?本大神告诉你:想要知道为什么需要头文件的话,你就应该知道C语言编译的过程; 本大神为你们准备了基本知识: C语言文件的编译与执行的四个阶段并分别描述: C++中的头文件和源文件:如何写头文件 (这个写的很好,明白) 为什么有头文件的原因:(按步骤来) 1. 在一个文件A中,如果要使用另一个文件B里的函数 sum(),那么我们就需要在文件A里面声...
阅读全文
摘要:用于整理记录一些C语言下的小知识点: 1. 在C语言中,怎么查看一个数据类型占用了多少个字节大小呢? 可以使用sizeof(int)/sizeof(double)等来查看某数据类型到底用了几个字节; 注意:sizeof 它并不是一个函数,而是一个单目操作符, 2. 作用域: 全域变量:定义在函数之外的变量为全局变量; 它的作用域为:从定义开始,至文件最后; 对于全局变量,我们经常使用ex...
阅读全文
摘要:列举这一部分的目的就是注意它的写法,尤其是 分号 ; 的位置; 1. if-else if else 语句: if (表达式1) 语句1; else if (表达式2) 语句2; else 语句3; 2. ? : 运算符 表达式1 ? 表达式2 : 表达式3 如果表达式1 为真,则返回表达式2 值,否则返回表达式3的值; 3. switch 语句 ...
阅读全文
摘要:C语言中基本的数据类型有: 整型: 分为有符号整型(signed)和无符号整型(unsigned ), 它们各自又可以分为 长整型(long), 短整型(short), 整型(int)和字符型(char), 所以结合起来一共有8种基本的整型结构: long/short/int/char/unsigned long/unsigned short/unsigned int/unsigned char...
阅读全文
摘要:首先说明一点,如果我们要使用GDB来调试我们的C/C++程序时,在使用GCC编译程序时,应该带上 –g 参数, 它负责生成 与GDB相关的调试信息; 1.如何对一个文件启动GDB调试? 方法一: 命令行输入: gdb filename 方法二: 命令行输入: gdb , 进行gdb工作界面以后,再输入命令: file filename ...
阅读全文
摘要:1. 数组与指针: 对于数组,需要注意两点:1, C语言中只有一维数组, 而且数组的大小必须在编译期就作为一个常数确定下来; 2. 对于一个数组,我们只能做两件事:确定数组的大小 和 获得指向该数组下标为0的元素的指针; 实际上,对于数组下标的运算,实际上都是通过指针进行的; 如: int a[10] ,数组名 a 实际上为指向数组第0个元素的指针; 所以, a[i] 可以...
阅读全文
摘要:声明:以下内容,在linux系统下操作的,编译器为gcc. scanf()函数: 当控制字符为 %c 时,它会读入你输入的空格、回车等键的; 当用%d 时:默认分隔符(分隔也是结束的标志嘛)是所有的 white-spaces(空格、回车、制表); 注意:1. 输入时,应该用空格或着 制表符分开,不能用;或,哦; 2. 如果要用的话,你的输入应该与 sca...
阅读全文
摘要:来来来,来看这篇文章: http://www.cnblogs.com/biyeymyhjob/archive/2012/07/19/2598815.html 总结一下: 1.先来介绍它的第一条也是最重要的一条:隐藏。(static函数,static变量均可) 所有未加static前缀的全局变量和函数
阅读全文
摘要:解释1 : 定义中##和#的作用内核中有很多的宏定义,在宏定义define中经常看到两个字符串##和#,这里把它的用法做一下说明:1. ####是一个连接符号,用于把参数连在一起例如:> #define FOO(arg) my##arg则> FOO(abc)相当于 myabc2.#:是“字符串化”的意思。出现在宏定义中的#是把跟在后面的参数转换成一个字符串例如:> #define STRCPY(...
阅读全文
摘要:本文内容概要: 代码中特殊的注释技术——TODO、FIXME和XXX的用处。 前言:今天在阅读Qt Creator的源代码时,发现一些注释中有FIXME英文单词,用英文词典居然查不到其意义!实际上,在阅读一些开源代码时,我们常会碰到诸如:TODO、FIXME和XXX的单词,它们是有其特殊含义的。、TODO: + 说明:如果代码中有该标识,说明在标识处有功能代码待编写,待实现的功能在说明中会简略...
阅读全文
摘要:预处理过程时,会做以下事情或着更多: 将所有的#define删除,并且展开所有的宏定义; 处理所有条件编译指令,如#if,#ifdef等; 处理#include预编译指令,将被包含的文件插入到该预编译指令的位置。该过程递归进行,及被包含的文件可能还包含其他文件。 删除所有的注释//; 添加行号和文件
阅读全文
摘要:1,gcc与g++的问题: 1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序。 2.编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接。 当我们常规使
阅读全文
摘要:只列出自己感觉有用的: 1, 缩进用TAB(8个字节), 当我的程序有3个以上的缩进时,应该修改自己的程序。 附加好处:能在程序变得嵌套层数太多时给我们警告。太多的嵌套对于程序执行的效率和易读性都是致命的杀手。 2, 80行,字符,代码行的极限; 3,既然有代码行极限,很多情况下我们不得不断开一个完
阅读全文