mirror of
https://github.com/Aexiar/c.git
synced 2024-10-22 14:05:45 +02:00
2024年10月9日 16:20
This commit is contained in:
parent
b5769ff0d8
commit
73f30f31f8
@ -944,7 +944,9 @@ int main() {
|
|||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
>
|
>
|
||||||
> 应用场景:用于判断某个宏是否定义过。
|
> * ① 应用场景:用于判断某个宏是否定义过。
|
||||||
|
> * ② 类似于分支结构中的 `if...else` 语句。
|
||||||
|
> * ③ 最典型的应用就是解决头文件重复问题。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -952,17 +954,114 @@ int main() {
|
|||||||
|
|
||||||
```c
|
```c
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
int main(){
|
int main() {
|
||||||
#ifdef _DEBUG
|
|
||||||
printf("正在使用 Debug 模式编译程序...\n");
|
// 禁用 stdout 缓冲区
|
||||||
#else
|
setbuf(stdout, nullptr);
|
||||||
printf("正在使用 Release 模式编译程序...\n");
|
|
||||||
#endif
|
#ifdef _DEBUG
|
||||||
|
printf("正在使用 Debug 模式编译程序...\n");
|
||||||
|
#else
|
||||||
|
printf("正在使用 Release 模式编译程序...\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
system("pause");
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 6.4 \#if defined
|
||||||
|
|
||||||
|
* 语法:
|
||||||
|
|
||||||
|
```c
|
||||||
|
#if defined 宏名
|
||||||
|
...
|
||||||
|
#elif defined 宏名
|
||||||
|
...
|
||||||
|
#else
|
||||||
|
...
|
||||||
|
#endif
|
||||||
|
```
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
>
|
||||||
|
> * ① 应用场景:用于判断某个宏是否定义过。
|
||||||
|
> * ② 类似于分支结构中的 `if...elseif..else` 语句。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* 示例:
|
||||||
|
|
||||||
|
```c
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
|
||||||
|
// 禁用 stdout 缓冲区
|
||||||
|
setbuf(stdout, nullptr);
|
||||||
|
|
||||||
|
#if defined(_DEBUG)
|
||||||
|
printf("正在使用 Debug 模式编译程序...\n");
|
||||||
|
#elif defined(NDEBUG)
|
||||||
|
printf("正在使用 Release 模式编译程序...\n");
|
||||||
|
#elif defined(RELWITHDEBINFO)
|
||||||
|
printf("正在使用 RelWithDebInfo 模式编译程序...\n");
|
||||||
|
#elif defined(_MINSIZEREL)
|
||||||
|
printf("正在使用 Minsizerel 模式编译程序...\n");
|
||||||
|
#else
|
||||||
|
printf("正在使用未知模式编译程序...\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 6.4 #ifndef
|
||||||
|
|
||||||
|
* 语法:
|
||||||
|
|
||||||
|
```c
|
||||||
|
#ifndef 宏名
|
||||||
|
...
|
||||||
|
#else
|
||||||
|
...
|
||||||
|
#endif
|
||||||
|
```
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
>
|
||||||
|
> `#ifndef...#endif` 指令跟 `#ifdef...#endif`正好相反。它用来判断,如果某个宏没有被定义过。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* 示例:
|
||||||
|
|
||||||
|
```c
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
|
||||||
|
// 禁用 stdout 缓冲区
|
||||||
|
setbuf(stdout, nullptr);
|
||||||
|
|
||||||
|
#ifndef _DEBUG
|
||||||
|
printf("正在使用 Release 模式编译程序...\n");
|
||||||
|
#else
|
||||||
|
printf("正在使用 Debug 模式编译程序...\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 6.5 应用示例
|
||||||
|
|
||||||
|
* 需求:开发一个 C 语言程序,让它暂停 5 秒以后再输出内容,并且要求跨平台。
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
>
|
||||||
|
> 不同平台下的暂停函数和头文件都不一样,如下所示:
|
||||||
|
>
|
||||||
|
> * ① Windows 平台下的暂停函数的原型是`void Sleep(DWORD dwMilliseconds)`(注意 S 是大写的),参数的单位是 `ms`,位于 `<windows.h>` 头文件。
|
||||||
|
> * ② Linux 平台下暂停函数的原型是`unsigned int sleep (unsigned int seconds)`,参数的单位是 `s`,位于 `<unistd.h>` 头文件。
|
Loading…
Reference in New Issue
Block a user