
C Programming Language
文章平均质量分 69
Decisiveness
这个作者很懒,什么都没留下…
展开
-
C语言头文件里,一开头的宏定义 #ifndef 的主要作用
#ifndef的主要作用,是防止重复定义。这里主要是用来防止重复包含头文件的。比如下面的头文件 test.h#ifndef TEST_H#define TEST_H...#endif第一次包含头文件时,TEST_H没有被定义,第二次再用时 TEST_H 已经被定义了,就不再包含这个头文件了。这样可防止重复编译。具体就是如下情况,同一个头文件写转载 2014-03-29 20:15:24 · 2035 阅读 · 0 评论 -
将一个负的short类型的变量赋值给一个int类型的变量,之后int类型的变量的值仍是负数
#include int main(void){ short a = -20; int b = (int)a; int c = a; long d = a; printf("b: %d\t; c: %d; d: %ld\n", b, c, d);}the result:b: -20; c:原创 2016-02-17 14:50:39 · 4054 阅读 · 0 评论 -
可变参数va_arg()
1. 函数参数的传递原理 函数参数是以数据结构:栈的形式存取,从右至左入栈。 首先是参数的内存存放格式:参数存放在内存的堆栈段中,在执行函数的时候,从最后一个开始入栈。因此栈底高地址,栈顶低地址,举个例子如下:void func(int x, float y, char z); 那么,调用函数的时候,实参 char z 先进栈,然后是 float y,最后是 int x,因此转载 2015-11-20 16:46:22 · 996 阅读 · 0 评论 -
空结构体和空类
空结构体和空类 今天看到一片博客说面试被问空结构体大小的问题,发现这个问题以前还真没想过。于是自己试了一把,并在网上找了些资料总结如下:空结构体,先上代码1234567891011#include typedef empt转载 2015-06-07 11:16:28 · 517 阅读 · 0 评论 -
C语言初探 之 printf压栈顺序(printf("%d %d %d %d %d %d\n",a++, ++a, a++, ++a, a++, ++a ))
写在篇头:在不同的编译器下结果不同,本例测试的环境为 devcpp5.3.0.1 。 —————————————————————————————————————————————————————————————————————— 先看一段代码,猜猜会是什么输出:[cpp] view plaincopyprint?x转载 2015-06-02 21:03:00 · 7444 阅读 · 3 评论 -
应用程序内存空间(应用程序堆、栈、全局区、文字常量区、程序代码区)
http://blog.youkuaiyun.com/benny5609/archive/2008/03/25/2217258.aspx 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程转载 2015-06-02 21:40:14 · 2285 阅读 · 0 评论 -
void (*signal(int signo, void (*fun(int))))(int)
void (*signal(int signo, void (*fun(int))))(int)int (*p)();这是一个函数指针, p所指向的函数是一个不带任何参数, 并且返回值为int的一个函数.int (*fun())();这个式子与上面式子的区别在于用fun()代替了p,而fun()是一个函数,所以说就可以看成是fun()这个函数执行之后,它的返回值是一个函数指针,转载 2015-05-26 21:08:25 · 687 阅读 · 0 评论 -
C语言条件编译及编译预处理阶段(__LINE__)
一、C语言由源代码生成的各阶段如下:C源程序->编译预处理->编译->优化程序->汇编程序->链接程序->可执行文件 其中 编译预处理阶段,读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理。或者说是扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。预处理过程先于编译器对源代码进行处理。 在C 语言中,并没有任何内在的机制转载 2015-05-11 16:49:26 · 844 阅读 · 0 评论 -
关于C语言中的未初始化变量的值
我们在刚学C编程的时候经常碰到“烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫”,这是为什么呢?先从上次某公司笔试说起,当时有一题是考到了关于变量初始化的问题。在主函数外面(全局)和里面(局部)个定义一个int类型数值。然后没有赋值,直接打印出来,问输出什么。那会只知道全局默认是0,局部是一个负的挺大的数,还以为是最小整数。回来后试了下,局部的int默认的是-858993460,即0转载 2015-04-23 13:41:02 · 2546 阅读 · 0 评论 -
C语言typeof详解
操作系统:ubuntu10.04前言: typeof关键字是C语言中的一个新扩展,这个特性在linux内核中应用非常广泛。一,说明 typeof的参数可以是两种形式:表达式或类型。 1,表达式的的例子: typeof(x[0](1) 这里假设x是一个函数指针数组,这样就可以得到这个函数返回值的类型了。转载 2015-04-18 12:24:01 · 1100 阅读 · 0 评论 -
gcc attribute weak & alias应用
1 gcc attribute weak & alias应用alias ("target")The alias attribute causesthe declaration to be emitted as an alias for another symbol, which must bespecified. For instance,转载 2015-03-31 00:21:34 · 460 阅读 · 0 评论 -
GCC和C99标准中的inline
本文介绍了GCC和C99标准中inline使用上的不同之处。inline属性在使用的时候,要注意以下两点:inline关键字在GCC参考文档中仅有对其使用在函数定义(Definition)上的描述,而没有提到其是否能用于函数声明(Declare)。从inline的作用来看,其放置于函数声明中应当也是毫无作用的:inline只会影响函数在translation unit(可以转载 2015-03-09 17:41:19 · 2157 阅读 · 0 评论 -
GUN ARM汇编中标号的引用在汇编和C语言中区别(monitor_flash_len = _bss_start - _armboot_start;)
u-boot/cpu/xx/start.S中:_TEXT_BASE: .word TEXT_BASE /*uboot映像在SDRAM中的重定位地址,我设置为0xa170 0000 */ .globl _armboot_start _armboot_start: .word _start /*_start是程序入口,链接完毕它的值应该是0xa170 0000=TEXT_B转载 2015-03-09 13:23:37 · 1052 阅读 · 0 评论 -
#pragma预处理命令
#pragma预处理命令#pragma可以说是C++中最复杂的预处理指令了,下面是最常用的几个#pragma指令:#pragma comment(lib,"XXX.lib")表示链接XXX.lib这个库,和在工程设置里写上XXX.lib的效果一样。#pragma comment(linker,"/ENTRY:main_function")表示指定链接器选项/ENTRY:ma转载 2015-03-08 18:59:03 · 504 阅读 · 0 评论 -
编译器优化 volatile
1、编译器优化介绍 内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。再看软件一级的优化:一种是在编写代码时由程序员优化,另一种是由编译器进行优化。编译器优化常用的方法有:将内存变量缓存到转载 2015-03-07 17:22:15 · 982 阅读 · 0 评论 -
typedef int(init_fnc_t) (void) 和 typedef int(*init_fnc_t) (void)
typedef int(init_fnc_t) (void);这个就是一个取别名的过程。我们通常情况下会如下使用 typedef :typedef int MyInt;MyInt a;这个时候我们的MyInt 就和int是一样的意思。而对于函数的申明我们通常会这样申明:int InitFunction() (void);此时表示申明了一个函数名为Init转载 2015-03-04 16:26:33 · 344 阅读 · 0 评论 -
C语言 字符串前加L的意义 如:L“A”
转自:http://c.biancheng.net/cpp/html/1069.htmlUnicode或者宽字符都没有改变char数据型态在C中的含义。char继续表示1个字节的储存空间,sizeof (char)继续返回1。理论上,C中1个字节可比8位长,但对我们大多数人来说,1个字节(也就是1个char)是8位宽。C中的宽字符基于wchar_t数据型态,它在几个表头文件包括WCHAR.转载 2016-10-13 14:39:27 · 3843 阅读 · 0 评论