[源码下载]

不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出

作者:webabcd

介绍
不可或缺 Windows Native 之 C 语言

  • 预处理命令
  • 输入
  • 输出

示例
1、预处理命令
cPreprocessor.h

#ifndef _MYHEAD_PREPROCESSOR_
#define _MYHEAD_PREPROCESSOR_ #ifdef __cplusplus
extern "C"
#endif char *demo_cPreprocessor(); #endif

cPreprocessor.c

/*
* 预处理命令
*
* 以“#”开头的就是预处理命令(预处理命令不用“;”结尾),其是指在编译之前所做的工作
*/ #include "pch.h"
#include "cPreprocessor.h"
#include "cHelper.h" // #define - 宏定义命令,在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”
#define PI 1000 // #define 标识符 字符串
#define S PI * r * r // 一个宏也可以引用另一个宏
#define S2(r) PI * r * r // 宏是可以带参数的
#define PI 3.14 // 宏重名的话,后面的会替换前面的
#define INTEGER int // 宏定义当然也可以定义数据类型,因为其本质就是拿一个字符串替换另一个字符串
#define ISWINDOWS 1
#define X(n) n == 0 ? 0 \
: - // 一个长的 #define 可以用“\”分成多行 // 说到这里再插一句,单行注释的话 \
以“\”结尾则下一行也为注释 \
另外:ANSI C 只支持“/**/”注释,而不支持“//”注释 /*
再强调一遍,宏替换的本质就是拿一个字符串替换另一个字符串 如果是 #define x 1 + 2
那么表达式 3 * x * 4 就相当于 3 * 1 + 2 * 4,结果是 11
如果是 #define x (1 + 2)
那么表达式 3 * x * 4 就相当于 3 * (1 + 2) * 4,结果是 36
*/ /*
#include - 文件包含命令 #include "stdio.h" 使用双引号表示首先在文件当前目录中查找(支持绝对路径和相对路径),若未找到则到包含目录中去查找
#include <math.h> 使用尖括号表示在包含文件目录中去查找,而不在文件当前目录去查找 包含文件目录的设置:项目 -> 右键 -> 属性 -> 配置属性 -> VC++ 目录 -> 包含目录
*/ char *demo_cPreprocessor()
{
INTEGER r = ; // 宏展开其相当于 int r = 2;
float x = S; // 宏展开其相当于 3.14 * r * r,即 3.14 * 2 * 2 float y = S2(); // 宏展开其相当于 3.14 * 2 * 2 int z = X(); // -1 // 条件编译命令有:#ifdef, #else, #endif, #ifndef, #if
#ifdef PI // 如果在宏定义中定义了 PI(ifdef 是 if defined 的简写)
;
#else // 如果不需要的话,可以不要 #else
;
#endif // #ifdef 和 #endif 必须成对 #ifndef PI // 如果在宏定义中没有定义 PI(ifndef 是 if not defined 的简写)
;
#else // 如果不需要的话,可以不要 #else
;
#endif // #ifndef 和 #endif 必须成对 #if ISWINDOWS // 如果宏定义 ISWINDOWS 非零则为真(ISWINDOWS 是整型)
;
#else // 如果不需要的话,可以不要 #else
;
#endif // #if 和 #endif 必须成对 return float_toString(y);
} // 这之后不再有 PI 这个宏定义(undef 是 undefine 的简写)
#undef PI

2、输入和输出
cIO.h

#ifndef _MYHEAD_IO_
#define _MYHEAD_IO_ #ifdef __cplusplus
extern "C"
#endif char *demo_cIO(); #endif

cIO.c

/*
* 标准输入,标准输出
*
* 对系统指定的标准设备的输入和输出(即从键盘输入数据,从显示器输出数据),这种输入输出称为标准的输入输出,简称标准 I/O
*/ #include "pch.h"
#include "cIO.h"
#include "cHelper.h" void io_printf();
void io_scanf();
void io_putchar();
void io_getchar(); char *demo_cIO()
{
// 格式化输出 printf
io_printf(); // 格式化输入 scanf
io_scanf(); // 字符输出 putchar()
io_putchar(); // 字符串输入 getchar()
io_getchar(); return "看代码及注释吧";
} // 格式化输出 printf
void io_printf()
{
// printf - print formatted,以下仅列一下常用用法
// printf 的返回值为:实际输出的字符数 int a = ;
float b = 3.14159;
char *c = "webabcd wanglei"; // %d - 以十进制形式输出带符号整数
// %.2f - 以浮点型输出,取小数点后 2 位(四舍五入)
// %.7s - 以字符串输出,取前 7 位
printf("%d, %.2f, %.7s\n", a, b, c);
// 输出结果:88, 3.14, webabcd
// printf 的返回值为 18 // %o - 以八进制形式输出无符号整数
// %#o - 以八进制形式输出无符号整数,并加前缀 0
printf("%o, %#o\n", a, a);
// 输出结果:130, 0130 // %x 或 %X - 以十六进制形式输出无符号整数
// %#x - 以八进制形式输出无符号整数,并加前缀 0x
// %#X - 以八进制形式输出无符号整数,并加前缀 0X
printf("%x, %#x, %#X\n", a, a, a);
// 输出结果:58, 0x58, 0X58 // %10.2f - 以浮点型输出,取小数点后 2 位;显示宽度至少为 10 位,不够以空格填充
printf("%10.2f\n", b);
// 输出结果: 3.14(前面有 6 个空格) /*
* 类型说明如下:
* %d / %i - 整型
* %o - 无符号八进制
* %u - 无符号十进制
* %x / %X - 无符号十六进制
* %f / %F - 浮点型
* %e / %E - 科学表示法(%e后面就输出小写e;%E后面就输出大写E)
* %g / %G - 浮点型,但是会去掉小数后面多余的 0,然后在 %f 和 %e 之中选一个最短的形式输出
* %c - 字符
* %s - 按字符串输出,直至'\0'
* %p - 以十六进制形式输出指针
* %% - %
*
*
* 另外有两种长度格式:
* h - 按短整型量输出,比如:%hd - 按短整型输出; printf("%hd", 32769) 输出结果为 -32767
* l - 按长整型量输出,比如:%lf - 按 double 输出; %ld - long int; %lld - long long int
*/ float x = 3.14f;
printf("%f", x); // 3.140000
printf("%g", x); // 3.14 float y = 12345678.123456f;
printf("%e", y); // 1.234568e+07
printf("%f", y); // 12345678.000000
printf("%G", y); // 1.23457E+07(另外,比 %e 少一位小数)
} // 格式化输入 scanf
void io_scanf()
{
// scanf - scan formatted,以下仅列一下常用用法
// printf 的返回值为:成功接收到的赋值参数的个数 int a;
float b;
char c[]; // %2s - 代表输入字符串时,只取前 2 位
// 如果在两个格式化参数之间没有它字符的话,则可用空格或TAB或回车做间隔
scanf("%d%f%2s", &a, &b, c);
// 输入 1 3.14 webabcd 后的结果为:a 的值为 1,b 的值为 3.14,c 的前 3 个元素为 'w' 'e' '\0'
// scanf 的返回值为 3 // 如果在两个格式化参数之间有它字符的话,则按指定的字符做间隔
scanf("a=%d, b=%f, c=%s", &a, &b, c);
// 输入:a=1, b=3.14, c=webabcd
} // 字符输出 putchar()
void io_putchar()
{
// 输出一个字符
putchar('a');
} // 字符串输入 getchar()
void io_getchar()
{
// 当程序调用 getchar() 函数时,程序就等着用户按键,用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中)
// 当用户键入回车之后,getchar() 函数才开始从键盘缓冲区中每次读入一个字符,一直到缓冲区中的字符读完 /*
char c = NULL;
while ((c == getchar()) != '\n')
{
printf("%c", c);
}
*/ // getch(), getche() 之类的需要 conio.h, 但是在 linux 下是没有的,所以就不写了
}

OK
[源码下载]

不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出的更多相关文章

  1. 不可或缺 Windows Native (1) - C 语言: hello c

    [源码下载] 不可或缺 Windows Native (1) - C 语言: hello c 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 在 Windows Sto ...

  2. 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符

    [源码下载] 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 ...

  3. 不可或缺 Windows Native (2) - C 语言: 常量,变量,基本数据类型

    [源码下载] 不可或缺 Windows Native (2) - C 语言: 常量,变量,基本数据类型 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 常量 变量 基本 ...

  4. 不可或缺 Windows Native (3) - C 语言: 运算符,表达式,条件语句,循环语句,转向语句,空语句等

    [源码下载] 不可或缺 Windows Native (3) - C 语言: 运算符,表达式,条件语句,循环语句,转向语句,空语句等 作者:webabcd 介绍不可或缺 Windows Native  ...

  5. 不可或缺 Windows Native (5) - C 语言: 数组

    [源码下载] 不可或缺 Windows Native (5) - C 语言: 数组 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 数组 示例cArray.h #ifn ...

  6. 不可或缺 Windows Native (6) - C 语言: 函数

    [源码下载] 不可或缺 Windows Native (6) - C 语言: 函数 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 函数 示例cFunction.h # ...

  7. 不可或缺 Windows Native (7) - C 语言: 指针

    [源码下载] 不可或缺 Windows Native (7) - C 语言: 指针 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 指针 示例cPointer.h #i ...

  8. 不可或缺 Windows Native (9) - C 语言: 动态分配内存,链表,位域

    [源码下载] 不可或缺 Windows Native (9) - C 语言: 动态分配内存,链表,位域 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 动态分配内存 链 ...

  9. 不可或缺 Windows Native (10) - C 语言: 文件

    [源码下载] 不可或缺 Windows Native (10) - C 语言: 文件 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 文件 示例cFile.h #ifn ...

随机推荐

  1. 使用Ant编译提示Class not found: javac1.8

    无论是使用Eclipse还是使用Ant命令,都可能会在编译时遇到提示:Class not found: javac1.8 今天用Ant打包Android,apk,运行出现了batch_build.xm ...

  2. 数据仓库专题(23):总线矩阵的另类应用-Drill Down into a More Detailed Bus Matrix

    一.前言 Many of you are already familiar with the data warehouse bus architecture and matrix given thei ...

  3. IT战略规划咨询

    目录 1IT战略规划微咨询简介 2IT战略的意义 3服务模式 4IT战略规划焦点问题 5IT战略规划步骤 6服务提供方微咨询网 7微咨询价值 8微咨询服务方式 9IT工作规划与IT战略规... IT战 ...

  4. 简化 Hadoop 2.4.1 Eclpse 插件编译【原创】

    昨天折腾hadoop2X的eclipse插件,从https://github.com/winghc/hadoop2x-eclipse-plugin把源码搞下来后,很快搞定出来一个,但是...New H ...

  5. IE11兼容性设定

    增加browser文件,如下:  <browsers>   <browser refID="Default">     <capabilities&g ...

  6. visual studio snippets风格

    snippet挺好用,但是不是我喜欢的那种风格,比如if是这样的 if () { XX } 而我比较习惯这种: if () { XX } 可以这么做: 工具(Tools)——代码段管理器(Code S ...

  7. make no mistake, we are the last line of defense.

    make no mistake, we are the last line of defense.

  8. zeromq 测试总结

    总结 测试项目 github (https://github.com/solq360/jmzq) 非常不稳定 pub/sub 模式 30W压测丢了27W条消息,官方没有给出任何的发送状态供业务层处理 ...

  9. 转载:更换zImage中的initramfs

    From: http://blog.csdn.net/linuxaxis/article/details/8769722 好吧,折腾了两三个星期,USB的问题没搞定,看来功夫还不到家,看了下efuse ...

  10. 关于 iOS 的一些学习资料

    iOS.Book.Effective Objective-C 2.0 1. 中文翻译版 (更新中) https://github.com/HagerHu/effective-objective-c-2 ...