这个人呐,面个试都会紧张,一紧张就忘东西。。。哎

其实究其原因在于自己对知识了解没有深入到一定程度(自己:怪我咯)。

起因

今天被问到使用C++语言中的宏来求一年的秒数。

分析问题,其实秒数很容易计算嘛-> 天数 x 小时数 x 秒数。

1小时 = 3600秒

1天 = 24小时

1年 = 闰年 ? 366 : 365 天

所以这个宏要怎么写呢?

当时想法

算了,想个简便办法,反正题目中也没什么规定,那我就写个

#define SECOND_OF_YEAR 365*24*3600

好了

仔细想想,你tm是不是个程序员啊?如果需求不清楚,那就去确定需求啊!如果需求清楚了,那你就把逻辑写完整啊!(痛骂自己一顿,切忌侥幸心理)

马后炮

那么完整的答案该怎么写呢?

#include

#define SECOND_OF_YEAR(__YEAR__) \

do { \

if (__YEAR__ % 100 != 0 && __YEAR__ % 4 == 0) { \

std::cout << 366 * 24 * 3600 << std::endl; \

} else { \

std::cout << 365 * 24 * 3600 << std::endl; \

} \

} while (false)

测试代码:

SECOND_OF_YEAR(2004); //闰年

SECOND_OF_YEAR(2003); //非闰年

SECOND_OF_YEAR(2000); //非闰年

// int a = SECOND_OF_YEAR(2003);//不能赋值呀

输出结果:

31622400

31536000

31536000

这样算是一个答案,输入年份,在控制台打印出当年的秒数。

如果要把答案再完善一些怎么办呢?在宏定义中去调库函数获取当前年份好了。

扩展一下

从上面的代码又想到一个问题,就是上面测试代码中被注释的一句,就是如果我需要这个宏作为一个方法来使用,要求通过宏获得一个返回值。

一开始我的想法:

。。宏哪有什么返回值咯?如果你强行要返回值,那就在宏中对__YEAR__的值作一个修改,或者传入一个另外的参数,将计算结果赋值给这个参数咯。这样在调用过宏之后,也能得到计算结果。

所以使用这个宏时,可能变成这样:

int year = 2003;

SECOND_OF_YEAR(year);

std::cout << year << std::endl;

结果是这样:

31536000

哈哈,这样其实也挺好的!(好你妹啊,你个弱鸡)

如题的答案

如果真的要返回值,其实是可以做到的啊!

童鞋,你可还记得这样的代码:

int a = 1;

int b = 2;

int c = 3;

a = b = c; //写成这样想必会更好理解 a = (b = c);

std::cout << a << "," << b << "," << c << std::endl;

输出结果:

3,3,3

上面的写法看得懂,那就好说了啊,直接上代码咯:

#define SECOND_OF_YEAR(__YEAR__) \

({ \

int bLeap = false; \

if (__YEAR__ % 100 != 0 && __YEAR__ % 4 == 0) bLeap = true; \

else bLeap = false;\

bLeap ? 366 * 24 * 3600 : 365 * 24 * 3600; \

})

测试代码:

int a = SECOND_OF_YEAR(2003);

std::cout << a << std::endl;

结果:

31536000

因为上面包含了语句,所以表达式中要用{}来包含语句,不能直接在()中写完整的语句。那如果我不想写这么大一堆怎么办?

其实下面一行代码就能解决这个问题:

#define SECOND_OF_YEAR(__YEAR__) (__YEAR__ % 100 != 0 && __YEAR__ % 4 == 0) ? 366 * 24 * 3600 : 365 * 24 * 3600

功能同上。

了解这一块之后,其实宏定义能做的事,真的炒鸡多啊~

c语言宏函数返回值,C++宏定义方法的返回值相关推荐

  1. 【数学】用C语言实现函数的定积分—— 把 “定积分定义计算出的值” 和 “牛顿-莱布尼兹公式计算出的值” 两者进行误差比较

    因为考研数学看到定积分的定义以及"牛顿-莱布尼兹公式" 突然心血来潮,想用C语言把它们实现出来并对比. 1.用 "定积分定义" 计算得出数值 以及 " ...

  2. 编写一个函数my_power,用循环的方法实现 返回一个float类型数的某个整数次幂(保留6位小数)。 如调用my_power(3.14,-2)返回0.101424

    编写一个函数my_power,用循环的方法实现返回一个float类型数的某个整数次幂(保留6位小数).如调用my_power(3.14,-2)返回0. #include <stdio.h> ...

  3. 劫持PR值的几个方法 假PR值成真PR值

    刚刚我介绍了一个网站误操作导致"劫持PR"了,下面就来说说如何劫持PR了 劫持PR值的几个方法-假PR值成真PR值!我们知道PR值对一个站很重要.有PR值更好和别的站做友情链接嘛. ...

  4. C语言宏定义、宏函数、内置宏与常用宏

    前言: 在C语言中,变量类型.循环控制.基础语法等与其他高级语言基本无异:而C语言(C++)特有的两把双刃剑指针和宏定义/宏函数使得C语言在底层开发中披荆斩棘.无所不能.这两个概念涉及范围比较广,其分 ...

  5. c/c++宏函数和多参宏函数

    记住宏函数并非真函数,就是一个字符串的替代动作,预编译阶段处理成真代码 1:基础宏函数 #include <stdio.h> #include <stdlib.h> #incl ...

  6. python返回长度值_Python 文件 truncate() 方法(截断返回截取长度)

    概述 Python 文件 truncate() 方法用于截断文件并返回截断的字节长度. 指定长度的话,就从文件的开头开始截断指定长度,其余内容删除:不指定长度的话,就从文件开头开始截断到当前位置,其余 ...

  7. C++函数指针的三种定义方法

    一.C的函数指针定义方法 定义一个两个int参数,一个int返回值的函数指针类型 typedef int (*func)(int,int) 定义一个两个int参数,一个int返回值的函数指针 int ...

  8. C语言分段函数计算(三角,对数函数使用方法)

    #include<stdio.h> #include<math.h> #define e 2.71828 //使用define函数给e定义初值 main() {int x;pr ...

  9. C语言基础--宏函数

    C语言基础–宏函数 1. 函数和数据类型 函数式宏(宏函数)和函数类比会更加灵活,我们通过两个例子来看一下. 函数 #include <stdio.h> int sqr_int(int x ...

最新文章

  1. 关于HTML两侧留白的解决以及解决过程
  2. nrf52832的p09,p10 配置为 普通的gpio口
  3. mysql实体数据模型闪_visualstudio2017 +EF+Mysql生成实体数据模型闪退
  4. Java中IO和NIO的本质和区别
  5. Monte Carlo Rendering De-noising
  6. 极客星球 | Unity3D插件模板化探索
  7. poj2387(Dijkstra)
  8. 解析几何----向量的线性表示等和线定理成等差数列
  9. 百度网盘超级会员,年卡低至198元!百度官方直充,会员实时生效!
  10. html+css唯品会的登录页面
  11. Windows10系统安装软件后软件界面异常(变得很小或很大),界面显示不完全的解决方案
  12. 移动宽带套餐介绍_移动宽带一年多少钱 2018移动宽带套餐介绍
  13. 升级JDK版本注意事项
  14. STM32开源开发环境的搭建
  15. 【C#】CurrentCulture和CurrentUICulture的区别及winform多语言版本设置
  16. 卸载流氓软件最后的奥义
  17. 【Unity2D游戏】实现实时的正确的遮挡关系(引擎自带功能)
  18. 【LeetCode】999. 车的可用捕获量
  19. Linux之nc命令详解
  20. 一个新技术与传统产业开始越来越深入融合的发展新趋势

热门文章

  1. 骑行运动耳机好不好用,推荐五款最适合骑行的运动耳机
  2. 基于python的音乐数据分析_[译] 你的歌单无聊吗?关于音乐和机器学习的数据分析...
  3. 如何修复win无线服务器,win10 无线802 1X认证故障处理 以 升级后网络故障常规解决方法...
  4. Git简易的命令行入门教程
  5. Angular + ng-antd-zorro 踩坑指南
  6. or导致索引失效的解决方法_索引失效原因总结
  7. 局域网同一个网段通信过程
  8. 【python爬虫】用python爬取股票数据
  9. binwalk -e mysql_Binwalk--多重文件查看利器
  10. 深圳大学——算法设计与分析——金罐游戏