当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

C语言基础八

发表于: 2014-07-22   作者:海天片语   来源:转载   浏览:
c gcc
摘要: #define是一条预处理指令,可以用来编写宏定义语句。 宏定义语句可以用来给数字起名字。 可以在编译时使用-D选项给一个名字指定对应的数字,例如 gcc -DSIZE=6 02circle. 宏是可以带参数的,宏的参数通常表示一个名称 宏的参数直接参与计算,函数的参数要先制作出一个替身然后才参与计算。 在编写带参数的宏时要在每个参数外边加一对小括号强制参数首先计算 不要把自
#define是一条预处理指令,可以用来编写宏定义语句。
宏定义语句可以用来给数字起名字。
可以在编译时使用-D选项给一个名字指定对应的数字,例如
gcc -DSIZE=6 02circle.
宏是可以带参数的,宏的参数通常表示一个名称
宏的参数直接参与计算,函数的参数要先制作出一个替身然后才参与计算。

在编写带参数的宏时要在每个参数外边加一对小括号强制参数首先计算

不要把自增,自减的计算结果作为宏的参数使用

宏里可以使用运算符#把一个参数转换成字符串字面值
宏里也可以使用运算符##把一个参数所代表的标识符和其他内容合并形成一个新标识符

条件编译指根据某个条件从多个语句组中选择一组来编译。
#ifdef 宏名称
    语句块1    
#else
	 语句块2
#endif
如果前面定义过对应的宏则编译语句块1,否则编译语句块2
预处理指令#ifndef也可以实现条件编译的效果
条件编译还可以从多组语句中进行选择,方法如下
#if   逻辑表达式1
    语句块1
#elif  逻辑表达式2
	 语句块2
#else
	 语句块3
#endif
其中#elif可以出现多次

C语言中不同的函数可以放置在不同的文件中。
所有函数的声明应该统一放置在头文件中。
如果一个源文件与某个头文件中的任意函数有关,这个源文件应该使用预处理指令#include把这个头文件包含进来。
多文件程序编译时应该在命令中包含所有源文件的名称,例如
gcc 1.c 2.c ...

还可以使用gcc对每个源文件进行单独编译,命令如下
gcc -c 1.c
命令结束会得到以.o作为扩展名的目标文件
可以使用gcc把多个目标文件合并成一个可执行文件,命令如下
gcc 1.o 2.o

编写头文件时要使用条件编译语句对内容进行控制,这样可以避免被多次编译。

/*
	主函数参数练习
*/
#include <stdio.h>
int main(int argc, char *argv[]) {
    int loop = 0;
	 /*for (loop = 0; loop <= (argc - 1); loop++) {
        printf("%s\n", argv[loop]);
	 }*/
	 for (loop = 1; loop <= (argc - 1); loop++) {
        printf("%s ", argv[loop]);
	 }
	 printf("\n");
    return 0;
}

/*
	预处理指令练习
*/
#include <stdio.h>
#define   PI             3.14f
#define   CIRCLE(r1)         2 * PI * r1
#define   AREA(r1)           PI * r1 * r1
#define   PRINT(arr, num)    printf("%d ", arr[num])
#define   INC(v)             v++
#define   SIZE               5
void inc(int value) {
    value++;
}
int main() {
    int values[SIZE], loop = 0;
    float r = 0.0f;
    printf("请输入一个半径:");
	 scanf("%f", &r);
	 printf("圆的周长是%g\n", CIRCLE(r));
	 printf("圆的面积是%g\n", AREA(r));
	 for (loop = 0; loop <= (SIZE - 1); loop++) {
        PRINT(values, loop);
	 }
	 printf("\n");
	 printf("loop是%d\n", loop);
	 INC(loop);
	 printf("loop是%d\n", loop);
	 inc(loop);
	 printf("loop是%d\n", loop);
    return 0;
}


/*
	宏练习
*/
#include <stdio.h>
#define SECPH         (60 * 60)
#define NEG(x)        0 - (x)
int main() {
    printf("NEG(6)是%d\n", NEG(6));
	 printf("NEG(3 + 4)是%d\n", NEG(3 + 4));
	 printf("小时数是%d\n", 7200 / SECPH);
    return 0;
}



/*
	宏练习
*/
#include <stdio.h>
#define MAX(x,y)      x > y ? x : y
#define CH(c)         c >= 'a' && c <= 'z' ? c- 'a' + 'A' : c - 'A' + 'a'
int main() {
    printf("MAX(3,7)是%d\n", MAX(3, 7));
	 printf("MAX(7,3)是%d\n", MAX(7, 3));
	 printf("CH('t')是%c\n", CH('t'));
	 printf("CH('Y')是%c\n", CH('Y'));
    return 0;
}


/*
	宏运算符练习
*/
#include <stdio.h>
#define STR(n)         #n
#define VAR(n)         v_##n
#define GLOBAL(n)      g_##n
int GLOBAL(value);
int main() {
    int VAR(value) = 3;
    printf("%s\n", STR(3 + 4));
	 printf("%s\n", STR(sizeof(int)));
	 printf("GLOBAL(value)是%d\n", GLOBAL(value));
    return 0;
}

/*
	预定义宏练习
*/
#include <stdio.h>
int main() {
    printf("当前行号是%d\n", __LINE__);
	 printf("文件名称是%s\n", __FILE__);
	 printf("日期是%s\n", __DATE__);
	 printf("时间是%s\n", __TIME__);
	 printf("%sC语言标准\n", __STDC__ ? "符合" : "不符合");
    return 0;
}


/*
	条件编译练习
*/
#include <stdio.h>
//#define ONE
int main() {
#ifndef ONE
    printf("1\n");
	 printf("3\n");
#else
	 printf("2\n");
	 printf("4\n");
#endif
    return 0;
}


/*
	条件编译练习
*/
#include <stdio.h>
int main() {
    int order = 0;
	 printf("请点菜:");
	 scanf("%d", &order);
#ifdef  ZHAOBENSHAN
	 if (1 == order) {
        printf("这个菜没有\n");
	 }
	 else {
        printf("这个真没有\n");
	 }
#else
    if (1 == order) {
        printf("这个菜有\n");
	 }
	 else {
        printf("这个菜没有\n");
	 }
#endif
    return 0;
}

/*
	条件编译练习
*/
#include <stdio.h>
int main() {
#if  defined(ONE)
    printf("1\n");
#elif  defined(TWO)
	 printf("2\n");
#else
	 printf("3\n");
#endif
    return 0;
}


/*
	条件编译练习
*/
#include <stdio.h>
int main() {
#if    defined(GONGCHANG)
    printf("80%%\n");
#elif  !defined(JINGPING)
	 printf("100%%\n");
#else
	 printf("120%%\n");
#endif
    return 0;
}

12add1.c
#include "12add.h"
int add(int x, int y) {
    return x + y;
}



/*
	多文件编程练习
*/
#include <stdio.h>
#include "12add.h"
int main() {
    printf("add(2, 3)是%d\n", add(2, 3));
    return 0;
}



#ifndef __12ADD_H__
#define __12ADD_H__
int add(int, int);
#endif  //__12ADD_H__



C语言基础八

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
Java语言基础(八) 一.数学运算 + - * / % (1)凡是byte short char类型都按int类型的计算     看
1.C语言数据类型 1.1 C语言有32个关键字 (1) 数据类型关键字(12个):char、double、enum、float、in
整理记录一些C语言知识点; 更新中... 1.左值,右值 常见的一个错误, int a[10]; printf("%d",&(a+1))
1、函数是C程序的基本单位。 2、一个C源程序至少要包含一个main函数,也可以包含若干个其 他函数。
1、C语言的硬件条件 c语言对硬件的要求不高,一般计算机都能满总。 C语言的硬件条件: 1)完整的指令
1)C语言中的程序的执行过程 1、C语言源文件(*.c)经过编译(Ctrl+F7)会生成*.obj的目标文件。此过程主
C编译器和链接器 (1)、初次体验 # include <stdio.h> int main(int argc, char* argv[]) { pr
西洋棋中的皇后可以直线前进,吃掉遇到的所有棋子,如果棋盘上有八个皇后,则这八个皇后如何相安无
C语言快速入门系列(八) C语言位运算与文件 本章引言: 在不知不觉中我们的C快速入门系列已经慢慢地接
流程控制是C语言中比较基础的。。。 它分为三种状态: 1是顺序结构 2是选择结构 3是循环结构 我要说
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号