本文转载自:http://blog.csdn.net/maopig/article/details/7230311 在源代码里面如果这样是定义的:#ifdef   MACRONAME//可选代码#endif 那在makefile里面gcc   -D   MACRONAME=MACRODEF或者gcc   -D   MACRONAME 这样就定义了预处理宏,编译的时候可选代码就会被编译进去了. 对于GCC编译器,有如下选项:        -D macro=string,等价于在头文件中定义:#d…
1: sudo gcc -P -I. -I../instrument/stubs -I../instrument/stubs -I../ -E ctrl_xfer32.cc -o preprocessed.cc…
上一节拒绝造轮子!如何移植并使用Linux内核的通用链表(附完整代码实现)我们在分析Linux内核链表的时候注意到内核在求解结构体偏移的时候巧妙的使用了container_of宏定义,今天我们来详细剖析下内核到底是如何求解结构体成员变量的地址的. @ 目录 结构体在内存中是如何存储的 container_of宏 typeof (((type *)0)->member) const typeof(((type )0)->member)__mptr = (ptr); offsetof(type,…
前言 今天,在整理自己的代码的时候,考虑到我写的代码从一至终都是在一个cpp文件里面.于是,想把自己的代码中的各个模块分离开来,以便更好地阅读和管理. 遇到的问题 我的做法是: 宏定义.结构体定义.函数声明以及全局变量定义放到一个head.h头文件中 函数的定义放到head.cpp中 main函数放到main.cpp中 然而却报错了,提示xxx变量在*.obj文件中已定义 问题出现的原因 为什么会出现这种情况呢? 首先单个文件的编译是独立的.在head.cpp编译到head.obj,main.c…
在源代码里面如果这样是定义的: #ifdef   MACRONAME //可选代码 #endif 那在makefile里面 gcc   -D   MACRONAME=MACRODEF 或者 gcc   -D   MACRONAME 这样就定义了预处理宏,编译的时候可选代码就会被编译进去了. 对于GCC编译器,有如下选项:         -Dmacro=string 或 -D macro=string,等价于在头文件中定义:#define   macro   string.例如:-D TRUE=…
预处理:也就是包括须要的头文件,用#include<标准头文件>或#include "自己定义的头文件" 宏定义,如:#define PI 3.1415926 查看用宏定义的值替换宏名称,如:gcc -E test.c 带參数的宏:MAX(x,y) (x)>(y)? ((x):(y))   //用法与函数一样 宏运算:     #define PRINT(n) printf(#n"=%d",n)   //#n 就是把传入的变量值作为字符串放在那里…
在Makefile中我们可以通过宏定义来控制源程序的编译.只要在Makefile中的CFLAGS(变量名随意)中通过选项-D来指定你于定义的宏即可. 如:CFLAGS += -D _YUQIANG在编译的时候加上此选项就可以了: $(CC) $(CFLAGS) $^ -o $@ 例如: Makefile文件内容为: CC = gcc RM = rm CFLAGS += -D _YUQIANG TARGETS := myapp all:$(TARGETS) $(TARGETS):main.c $(…
实际上是gcc命令支持-D宏定义,相当于C中的全局#define: gcc -D name gcc -D name=definition Makefile中可以定义变量(和宏很像),但是是给make解释器用的,对所编译的文件完全没有作用.   MSTAR:宏定义方式:字串定义方式和值定义方式 CC_TVOPTS += -DMS_BOARD_TYPE_SEL=$(BOARD_TYPE_SEL) CC_TVOPTS += -DMS_SW_CUS_SEL=SW_CONFIG_TRUNK_ATVMM C…
多数c语言的初学者对c工程开发过程各个阶段的作用理解不到位,而这方面的的知识又是实际开发过程中经常用到的技能点,所以就成为面试考察中一个重要的考察方面.例如:头文件的作用.头文件的内容:链接的作用和意义:条件编译的作用等等此类问题,接下来将c工程开发过程中的各种问题进行总结使大家能够自如应对这方面的面试题目. c工程开发经过以下几个阶段:           编辑-->预处理-->编译-->汇编-->链接-->运行-->调试 预处理阶段通常要完成三件事情,用头文件内容替…
目录(?)[-] 简单宏定义 带参数的宏 运算符 运算符 宏的通用属性 宏定义中圆括号 创建较长的宏 较长的宏中的逗号运算符 宏定义中的do-while循环do 空操作的定义 预定义宏 C语言中常用的宏 1. 简单宏定义 简单的宏定义有如下格式: [#define指令(简单的宏)] #define  标识符 替换列表 替换列表是一系列的C语言记号,包括标识符.关键字.数.字符常量.字符串字面量.运算符和标点符号.当预处理器遇到一个宏定义时,会做一个 “标识符”代表“替换列表”的记录.在文件后面的…