宏定义,条件预编译,多文件编程
2014-03-20 01:02
253 查看
宏定义的用法:
若文件名是test.c 则就可以用gcc -E test.c 对文件名进行预编译
条件预编译是指对.c 源文件进行选择性编译 主要是用来判断是否定义了宏
例如
gcc -E -DONE case.c //-E编译预处理 -DONE 定义ONE的宏
显示如图
用gcc -E test.c 来编译预处理test.c文件
得出的是
如图所示 都未定义宏则会输出100%
其中逻辑表达式需要在预处理阶段就能计算出来结果。例如在#if中声明变量分配空间就不对了
下面就是多文件编程
例如
文件一
gcc main.c add.c
这样编译是可以的,但是有可能出项隐式函数声明的问题 即调用add(2.3,3.5)会出现错误结果
可以加上头文件的调用
例如数组求和
add.h
add.c
main.c
gcc main.c add.c 就可以了。
注意可能存在重复包含头文件的时候。
这样就要采用
#include<stdio.h> #define PI 3.14 #define CH(x) x<='Z'&&x>='A'?tolower(x):toupper(x) #define C(x) #x #define INTV(n) i_##n int main() { int num = 2; printf("%lf\n",num * num * PI); char ch = 'A'; printf("%c\n",CH(ch)); printf("hello "C(world)"\n"); int INTV(num) = 20; printf("%d\n",INTV(num)); i_num = 200; printf("%d\n",i_num); return 0; }贴一张经过编译预处理的图
若文件名是test.c 则就可以用gcc -E test.c 对文件名进行预编译
条件预编译是指对.c 源文件进行选择性编译 主要是用来判断是否定义了宏
例如
#include <stdio.h> int main() { #ifdef ONE printf("1\n"); #else printf("2\n"); #endif return 0; }
gcc -E -DONE case.c //-E编译预处理 -DONE 定义ONE的宏
显示如图
用gcc -E test.c 来编译预处理test.c文件
得出的是
如图所示 都未定义宏则会输出100%
其中逻辑表达式需要在预处理阶段就能计算出来结果。例如在#if中声明变量分配空间就不对了
下面就是多文件编程
例如
文件一
int add(int a,int b){ // add.cpp return a+b; }
文件二
#include<stdio.h> //main.cppint main(){ printf("%d",add(1,2)); return 0}
gcc main.c add.c
这样编译是可以的,但是有可能出项隐式函数声明的问题 即调用add(2.3,3.5)会出现错误结果
可以加上头文件的调用
例如数组求和
add.h
extern int sum; void add(int*,int);
add.c
#include "add.h" int sum = 0; //注意若定义全局变量,main函数要在调用就需要在add.h中声明extern 关键字
void add(int *p,int size){ int i = 0; for (i = 0;i < size ;i++){ sum += *(p + i); } }
main.c
#include<stdio.h> #include"add.h" int main() { int a[10]={2,4,3,5,6,7,1}; int size = 7; add(a,size); printf("%d\n",sum); return 0; }
gcc main.c add.c 就可以了。
注意可能存在重复包含头文件的时候。
这样就要采用
#ifndef __add_h //最好和定义的头文件名类似 #define __add_h #include "add.h" #endif来避免头文件被重复包含
相关文章推荐
- 12:预处理指令、宏定义、条件编译、多文件编程
- 三种预处理功能 : 宏定义 --文件包含 -- 条件编译 import include 常用c/c++库
- 《黑马程序员》预处理指令(宏定义、条件编译、文件包含)(C语言)
- 【Xcode学C-6】宏定义#define、条件编译#if、文件包含、内部外部函数以及typedef的用法
- 条件编译,头文件,静态库,共享库与多文件编程
- C语言学习11:typedef和define区别,头文件的使用以及 <>和“”区别,宏定义中#和##的用法,条件编译,gcc和c99中宏定义使用printf和sprintf,条件编译避免头文件包含
- 黑马程序员--IOS学习笔记总结 预处理指令(宏定义、条件编译、文件包含)
- c语言学习--宏定义、条件编译、文件包含(就是include)
- ios笔记--宏定义,条件编译和文件导入笔记
- 条件编译,头文件,静态库,共享库与多文件编程
- 预处理 之 宏定义、文件包含、条件编译
- 6.C++ 宏定义、文件包含、条件编译、内部函数和外部函数
- C++编译预处理:宏定义指令、文件包含指令和条件编译指令
- 预处理指令—宏定义,条件编译,文件包含
- 黑马程序员——C语言——宏定义、条件编译、文件包含等
- 标C编程笔记day04 预处理、宏定义、条件编译、makefile、结构体使用
- 15-预处理指令1-宏定义、条件编译、文件包含
- C++编译预处理:宏定义指令、文件包含指令和条件编译指令
- 预处理命令(宏定义,条件编译,头文件)
- 【原创】头文件、宏定义、条件编译、避免头文件重复包含