随笔分类 - [01]【C/C++】
摘要:【1】存储类型分为哪几种? C/C++的存储类型从宏观可以分为两种: 一种是临时性的,即就是暂时的保存在栈中或者寄存器中的。 代表存储标识:auto, register 一种是永久性的,即就是在整个程序的运行期都存在的。代表存储标识:extern, static 一个变量或者函数只能具有一个存储类型
阅读全文
摘要:【1】assert是函数还是宏? 明确一点:在C中,ASSERT是宏而不是函数。 assert()是一个调试程序时经常使用的宏。在程序运行时它计算括号内的表达式。 如果表达式为FALSE (0), 程序将报告错误,并终止执行。 如果表达式不为0,则继续执行后面的语句。 这个宏通常用来判断程序中是否出
阅读全文
摘要:【1】offset宏的作用?答案:自己查MSDN(呵呵!我也不懂。)查询结果如下:Retrieves the offset of a member from the beginning of its parent structure.size_t offsetof(structName, memberName);ParametersstructName:Name of the parent data structure.memberName : Name of the member in the parent data structure for which to determine the
阅读全文
摘要:【1】为什么要使用extern "C"?知根知底,方能游刃有余。每个技术层面的规则,都是在现实需求的驱动之下应运而生的,这个也不例外。先想象一个问题:现在我们使用C++开发了一个很大的项目,为了实现代码复用,减少人力物力成本。我们要引入曾经开发过的一个相当大的文件,它是这个项目中不可或缺的一部分,但是,它是用C语言编写的。用“C编写的”意味着在编译处理时是以C语言的方式进行处理的。而C++支持函数重载机制,也就是说,同一个函数名实现的函数,在以C++方式编译时对函数的处理标志是与C语言方式实现的处理标志是截然不同的两种形式!所以引入它的文件名,在编译时不会出现问题,但是在链
阅读全文
摘要:【1】#pragma once这个宏有什么作用? 为了避免同一个头文件被包含(include)多次,C/C++中有两种宏实现方式:一种是#ifndef方式;另一种是#pragma once方式。在能够支持这两种方式的编译器上,二者并没有太大的区别。但两者仍然有一些细微的区别。 【2】两者的使用方式有
阅读全文
摘要:【1】宏定义怎么理解? 关于宏定义,把握住本质:仅仅是一种字符替换,而且是在预处理之前就进行。 【2】宏定义可以包括分号吗? 可以,示例代码如下: 1 #include<iostream> 2 using namespace std; 3 4 #define PI 3.14; //宏定义可以包括“;
阅读全文
摘要:【1】预处理语句是什么语句?预处理语句最明显的标志是一些行首以#开始的特殊语句。例如:#include,#define 等就是预处理语句。在程序的其它编译处理(词法分析、语法分析、代码生成、优化和连接等)之前,先进行这些语句的分析处理。【2】预处理语句使用的目的?目的在于帮助程序员编写出易读、易改、易移植并便于调试的程序。【3】预处理语句主要有那些?(1)宏定义和宏替换(2)文件包含(3)条件编译(4)行控制【4】预处理语句的作用范围? 从被定义语句开始直至被解除定义或是到包含它的文件结束为止均有效。【5】各种预处理语句有何区别?(1)宏定义参照文章宏定义(2)文件包含文件包含是指一个程序文件
阅读全文
摘要:先说“#if 0/#if 1 ... #endif”的作用。 我们知道,C标准不提供C++里的“//.....”这样的单行风格注释而只提供“/*....*/”这样的块注释功能。 通常使用“/*.......*/”写代码中说明性的注释文字(注释作用)以及在调试时关闭某段代码对编译器的可见性(屏蔽作用)
阅读全文
摘要:a是变量,0是字面量 写成 0 == a 是想判断a与0是否相等,即判断 a == 0 这个表达式是否为真的另一种写法 因为有些初学者在判断是否相等时容易写成 a = 0 这样的式子(但他其实是想表达是 a == 0) 但是由于判断写成了赋值,这样写的话编译器不会报错,因为 等号是右结合的,字面量0
阅读全文