
C/C++
coolibin
这个作者很懒,什么都没留下…
展开
-
C陷阱与缺陷笔记
1.当计算机启动时,硬件调用首地址为0位置的子例程:(*(void(*)())0)()解释:从里面往外看,先看里面的 void(*)(),这是个函数指针类型,这种类型的对象是函数,该函数无参数和返回值(即void)。原创 2013-10-17 13:43:10 · 893 阅读 · 0 评论 -
windows编写动态链接库DLL
1. 在VC中新建win32控制台工程,该工程调用动态链接库my.dll中的函数add,实现加法,代码如下#include #include typedef int(*lpAddFun)(int, int);//宏定义函数指针类型int main(int argc, char *argv[]){ HINSTANCE hDll;//DLL句柄 lpAddFun ad原创 2015-01-21 22:11:14 · 1708 阅读 · 0 评论 -
利用管道获取控制台程序的标准输出
1.该程序调用控制台程序hello.exe,通过管道获取到hello.exe的标准输出数据,并打印到当前程序的标准输出。#include #include #include using namespace std;void invoke(string exe);int main(int argc, char* argv[]){ string exe = "hello.exe原创 2015-01-22 21:35:00 · 6167 阅读 · 5 评论 -
BTEA算法C语言实现
#include #include using namespace std;#include #define DELTA 0x9e3779b9#define MX (((z>>5^y>3^z<<4)) ^ ((sum^y) + (key[(p&3)^e] ^ z))) void btea(uint32_t *v, int n, uint32_t const key[4]) {原创 2015-01-22 22:32:44 · 3063 阅读 · 0 评论 -
C,C++宏中#与##的讲解
文中__FILE__与示例1可以参见《使用ANSI C and Microsoft C++中常用的预定义宏》宏中的#的功能是将其后面的宏参数进行字符串化操作(Stringizing operator),简单说就是在它引用的宏变量的左右各加上一个双引号。如定义好#define STRING(x) #x之后,下面二条语句就等价。 char *pChar = "hello";转载 2015-01-24 12:48:14 · 741 阅读 · 0 评论 -
C++虚函数表深入剖析
多态性给我们带来了好处:多态使得我们可以通过基类的引用或指针来指明一个对象(包含其派生类的对象),当调用函数时可以自动判断调用的是哪个对象的函数。一个函数说明为虚函数,表明在继承的类中覆盖这个函数时,当调用这个函数时应当查看以确定调用哪个对象的这个函数。 (注:虚函数只能借助于指针或者引用来达到多态的效果。直接通过类的对象进行函数调用,而非指针或引用,即使被调用的函数是虚函数也转载 2015-05-06 16:24:45 · 949 阅读 · 0 评论 -
Effective C++笔记 55条编程法则
1. 视C++为一个语言联邦C++高效编程守则视状况而变化,取决于你使用C++的哪一部分。2. 尽量以const,enum,inline替代#define1) 对于单纯常量,最好以const对象或enum替换#define2) 对于形似函数的宏,最好改用inline函数替换#define3. 尽可能使用const1)如果关键字const出现在星号左边,表示被指物是常量原创 2015-07-10 16:55:54 · 1501 阅读 · 0 评论 -
泛型和面向对象C++
1. 在类内部定义的函数默认为inline......4.由于流对象不能复制,因此不能存储在容器中;由于流不能复制,因此形参或返回类型也不能为流类型,必须用指针或引用,对IO对象的读写会改变它的状态,因此引用必须是非const的。原创 2015-06-30 22:23:03 · 1744 阅读 · 0 评论 -
do...while(0)的妙用
在C++中,有三种类型的循环语句:for, while, 和do...while, 但是在一般应用中作循环时, 我们可能用for和while要多一些,do...while相对不受重视。 但是,最近在读我们项目的代码时,却发现了do...while的一些十分聪明的用法,不是用来做循环,而是用作其他来提高代码的健壮性。1. do...while(0)消除goto语句。通常,如果在转载 2016-07-12 09:48:35 · 379 阅读 · 0 评论 -
C/C++笔记
幻数——上下文里出现的字面常量。幻数带来的主要问题是它们没有(抽象)语义。当我们阅读和维护带有幻数的代码时,不得不去一个个地搞清楚每个光秃秃的量到底代表的是什么意思。没错,这样也能勉强度日,但带来的是不必要的精力浪费以及准确性的丧失。原创 2013-07-28 10:27:16 · 1603 阅读 · 0 评论 -
柔性数组
* 柔性数组即数组大小待定的数组 * C语言中结构体的最后一个元素可以是大小未知的数组 * C语言中可以由结构体产生柔性数组#include #include typedef struct _soft_array{ int len; int array[];}SoftArray;int main(){ int转载 2016-07-21 16:14:22 · 503 阅读 · 0 评论 -
C库函数笔记
一、string.h1.memcpy函数原型:void *memcpy(void *dest, const void *src, size_t n);功能:从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中返回值:函数返回dest的值。原创 2013-07-27 16:23:24 · 1616 阅读 · 0 评论 -
The Linux Programming Interface 笔记之malloc和free的实现
Althoughmalloc() and free() provide an interface for allocating memory that ismuch easier to use than brk() andsbrk(), it is still possible to make various programmingerrors when using them.原创 2017-02-04 23:20:20 · 698 阅读 · 0 评论 -
Linux笔记--二
1、Unix IPC分类:原创 2017-02-03 17:20:23 · 859 阅读 · 0 评论 -
C/C++/MFC时间用法
1. C\C++中用法/* strftime example */#include /* puts */#include /* time_t, struct tm, time, localtime, strftime */int main (){ time_t rawtime; struct tm * timeinfo; char buffer [8原创 2015-01-21 21:46:09 · 1629 阅读 · 0 评论 -
常量指针与指针常量的区别
三个名词虽然非常绕嘴,不过说的非常准确。用中国话的语义分析就可以很方便地把三个概念区分开。一) 常量指针。常量是形容词,指针是名词,以指针为中心的一个偏正结构短语。这样看,常量指针本质是指针,常量修饰它,表示这个指针乃是一个指向常量的指针(变量)。指针指向的对象是常量,那么这个对象不能被更改。在C/C++中,常量指针是这样声明的:1)const int *p转载 2015-01-08 16:17:41 · 612 阅读 · 0 评论 -
C类型转换函数
1.字符串→整型int atoi(char s[]){ int i,n,sign; for(i=0;isspace(s[i]);i++)//skip front spaces ; sign=(s[i]=='-')? -1:1; if(s[i]=='+'||s[i]=='-') //skip the sign i++;原创 2013-10-10 14:59:16 · 1049 阅读 · 0 评论 -
C语言复杂声明:char *(*(**(*(*(*x[5])(int,float))[][12])(double))(short,long))[][173];
今天又捧起久违的K&R C拜读了一遍。其实有点东西在6年前就想写,借着今天这个机会,终于把它写出来了。 初看一眼标题中的变量定义感觉是不是很抓狂?:)一直以来,C语言中关于指针、数据和函数的复合定义都是一个难点,其实,理解它也是有规律可循的。然而,即便是国内在讲解指针方面久负盛名的“谭本”也没有将这一规律说清楚,K&R C虽然提到了一点,却始终没有捅破这层窗户纸,也许是K&R觉得以“直观方转载 2013-09-17 21:39:56 · 1256 阅读 · 0 评论 -
C程序设计语言(K&R)笔记
在switch语句中,case的作用只是一个标号。8.break只能跳出其所在的一级到上一级,而不是所有层次。9. getch和ungetch 超前读并放回一个字符#define BUFSIZE 100char buf[BUFSIZE];//for ungetch to bufferint bufp=0;//the next spare index of bufint getch(void)原创 2013-09-06 10:19:38 · 4564 阅读 · 0 评论 -
main函数和启动例程
为什么汇编程序的入口是_start,而C程序的入口是main函数呢?本节就来解释这个问题。在讲例 18.1 “最简单的汇编程序”时,我们的汇编和链接步骤是:$ as hello.s -o hello.o$ ld hello.o -o hello以前我们常用gcc main.c -o main命令编译一个程序,其实也可以分三步做,第一步生成汇编代码,第二步生成目标文件,第三步生成可转载 2013-08-09 21:53:33 · 1059 阅读 · 0 评论 -
current宏的作用
在2.6的内核上允许内核栈的大小在4K和8K之间选择,于是,根据内核的配置,在thread_info.h中,加入了下面的一段代码#ifdef CONFIG_4KSTACKS#define THREAD_SIZE (4096)#else#define THREAD_SIZE (8192)这个大小的不同会影响内核堆栈的表示方法和current转载 2013-08-07 20:15:00 · 1374 阅读 · 0 评论 -
volatile修饰符的作用
作用volatile的作用: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.简单地说就是防止编译器对代码进行优化.比如如下程序:XBYTE[2]=0x55;XBYTE[2]=0x56;XBYTE[2]=0x57;XBYTE[2]=0x58;对外部硬件而言,上述四条语句分别表示不同的操作,会产生四种不同的动作,但原创 2013-03-21 20:38:38 · 2036 阅读 · 0 评论 -
vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess
目前知道三种方式:WinExec,ShellExecute ,CreateProcess,别人已经总结的很好了《vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess》,我全文转载一下,另外后面加点自己的总结(黑体部分,除了标题)。三个SDK函数: WinExec,ShellExecute ,CreateProcess可以实现调用其他程转载 2014-11-07 21:51:34 · 2439 阅读 · 0 评论 -
C语言文件操作fgets()
来说一说fgets(..)函数。 原型 char * fgets(char * s, int n,FILE *stream); 参数: s: 字符型指针,指向存储读入数据的缓冲区的地址。 n: 从流中读入n-1个字符 stream : 指向读取的流。 返回值:转载 2014-11-10 10:17:50 · 924 阅读 · 0 评论 -
VC++动态链接库(DLL)编程深入浅出
1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。 静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该D转载 2014-09-28 22:02:00 · 1209 阅读 · 0 评论 -
C++之string类
相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用。但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯定的。也许有人会说,即使不用MFC框架,也可以想办法使用MFC中的API,具体的操作方法在本文最后给出操作方法。其实,可能很多人很可能会忽略掉标准C++中string类的使用。标准C++中提供的str转载 2014-11-10 10:20:26 · 1023 阅读 · 0 评论 -
Visual Studio (VS)和Visual Assist X(VA)快捷键
“文本操作”快捷键命令名快捷键说明编辑.折叠到定义Ctrl + M,Ctrl + O自动确定在代码中创建区域的逻辑边界(如过程),然后隐藏它们。编辑.注释选定内容Ctrl + K,Ctrl + C使用编程语言的正确注释语法将代码的当前行标记为注释。(vc200转载 2014-10-30 20:11:50 · 4049 阅读 · 0 评论 -
C和C++相互调用 error LNK2001: unresolved external symbol
在项目中融合C和C++有时是不可避免的,在调用对方的功能函数的时候,或许会出现这样那样的问题。近来在主程序是C语言,而调用C++功能函数的时候,C++的*.h头文件都能找到,功能函数也都定义了,最重要的是,单独编译C++的时候完全没有问题,但当用主程序的C调用C++的功能函数时总是提示该函数未定义(undefined)。这是什么问题?如何解决?关键点在这里:我们就靠在C++的*.h和*转载 2014-10-31 21:21:22 · 2455 阅读 · 0 评论 -
字节长度与打印格式
采用的编译器是GCC,32位系统上sizeof : int = 4, long = 4, long long = 8sizeof: float = 4, double = 8, long double = 864位系统上sizeof : int = 4, long = 8, long long = 8sizeof: float = 4, double = 8, long doubl原创 2017-09-22 17:59:34 · 1277 阅读 · 0 评论