程序环境和预处理C语言(三)

1.IDE 集成开发环境:指“电子集成驱动器”。是一种辅助程序开发人员开发软件的应用软件。IDE通常包括编程语言编辑器、自动建立工具、通常还包括调试器。有些IDE包含编译器/解释器,如微软的Microsoft Visual Studio,有些则不包含,如Eclipse、SharpDevelop等。
2.预处理指令
预定义符号
__FILE__ 进行编译的源文件 用来获取文件名
__LINE__ 文件当前的行号 用来获取行号
__DATE__ 文件被编译的日期
__TIME__ 文件被编译的时间
__STDC__ 如果编译器遵循ANSI C(美国标准总局),其值为1,否则未定义

int main()
{
    int i=0;
    for(i=0;i<10;i++)
    {
        printf("file:%s,line:%d ",__FILE__,__LINE__,);
        printf("time:%s,date:%d ",__TIME__,__DATE__,);
        printf("%d\n",__STDC__);
        return 0;
}

#define定义的标识符,在后面不需要加分号,定义的宏后面也不需要加分号

3.#define定义的宏:允许把参数替换到文本中,

#define NUM 10
#define NUM2 NUM+2

这种情况是允许的
注意:参数列表的左括号必须与name紧邻
如果两者之间有任何空白存在,参数列表就会被解释为stuff的一部分
注意括号
#define定义的宏不可递归
带有副作用的宏:

#define MAX ((x)>(y))?(x):(y)
int main()
{
    int x=5;
    int y=8;
    int z=MAX(x++,y++)
    printf("x=%d y=%d z=%d\n",x,y,z);
return 0;
}

结果为6 10 9
宏与函数的区别
宏:可调试(因为是直接替换) 效率高,检查类型,不够严谨,会有运算符优先级的问题,从而导致程序出错,宏的每次使用均是直接替换,增加了程序的代码长度,注意带有副作用的参数。
函数:可调式(形参是实参的一份临时拷贝) 效率慢,对类型检查比较严格,函数是直接调用,不会出现带有副作用的运算符效果,函数在每次 使用之时,都是进行函数的压栈。

在printf中,有两个字符串,且两个字符串中间没有其他符号,则可合并为一个字符串。

printf("hello""world\n");
printf("hello world\n");
两者等同

#: 将参数插入到字符串中

#define PRINT(FORMAT,VALUE) printf("the value of"#VALUE" is "FORMAT,VALUE)

##:把两边的符号连接为一个符号

#define CAT(X,Y) X##Y

int value=10;
printf("%d\n",CAT(value,1));
printf("%d\n",value1);

4.命令行定义
在编译期间,Linux环境下,指定某个 标识符的大小
即 gcc test.c -D SZ=10;
通过命令行,指定变量的大小
5.条件编译

#ifdef
代码
#endif

条件编译的几种情况
情况一:

#if 常量表达式
    //.....
#endif
//常量表达式由预处理器求值

如:

#define __DEBUG__ 1
#if __DEBUG__
    //...
#endif

情况二:
多个分支的条件编译

#if 常量表达式
    //...
#else 常量表达式
    //....
#else
    //...
#endif

情况三:判断是否被定义

#if defined(symbol)
#ifdef symbol

#if !defined(symbol)
#ifndef symbol

情况四:嵌套指令

#if defined(OS_UNIX)
    #ifdef OPTION1
      unix_version_option1();
    #endif
    #ifdef OPTION2
      unix_version_option2();
    #endif
#elif defined(OS_MSDOS)
    #ifdef OPTION2
      msdos_version_option2();
    #endif
#endif

6.在头文件中:防止头文件被重复引用

#ifndef __TEST_H__       
#define __TEST_H__

#endif//__TEST_H__

两个方法相同

#pragma once

7.在引用头文件中<>与“ ”的区别
<>:直接去库里面的头文件去搜索
” “:自己写的头文件,即去当前的工程下去查找自己的头文件,如果没找到,去库里面的头文件去搜索

#include "../test.h"

在上一级的目录下
8.一些预处理指令:#error “ ”目的就是报错

#line  该行号
#pragma()
#pragma comment()  使用静态库

一些屏蔽错误码的预处理:详情请参考C语言深度解剖

环境这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值