C语言中的预定义宏:__FILE__, __LINE__, __DATE__, __TIME__

需积分: 5 0 下载量 5 浏览量 更新于2024-08-05 收藏 717B MD 举报
"了解C语言中的预处理器宏以及在STM32单片机编程中的应用" 在C语言编程中,预处理器宏是一种强大的工具,它们在编译阶段进行文本替换,可以用于实现各种功能,如条件编译、定义常量、以及提供关于源代码元信息的功能。在给定的标题 "__DATA__和__TIME__.md" 和描述中提到的"单片机内的一些骚操作",我们将探讨其中涉及到的几个预处理器宏:`__FILE__`, `__LINE__`, `__DATE__`, `__TIME__` 和 `__FUNCTION__`,并结合STM32单片机的编程环境来理解它们的用途。 1. `__FILE__`: 这个宏展开为一个包含了当前源代码文件名的字符串常量。在示例代码中,`printf("%s\n", __FILE__)` 会打印出源代码文件的完整路径,这对于调试和日志记录非常有用,可以追踪到错误发生的具体位置。 2. `__LINE__`: 这个宏展开为一个整数值,表示当前代码行的行号。在上面的例子中,`printf("%d\n", __LINE__)` 输出了代码中调用此宏的行号,帮助开发者快速定位问题所在的行。 3. `__DATE__`: 这个宏展开为当前编译日期的字符串,格式通常是"月日年"。例如,"Jul312018" 表示的是2018年7月31日。这个信息在版本控制或构建系统中可能会有用,可以用来追踪源代码的修改时间。 4. `__TIME__`: 类似于`__DATE__`,`__TIME__` 扩展为当前编译时间的字符串,格式是"小时:分钟:秒",如"15:40:23"。这有助于了解代码何时被编译,对于自动化构建和测试过程很有价值。 5. `__FUNCTION__`: 这个宏展开为当前执行函数的名称(作为字符串)。在示例中,`printf("%s\n", __FUNCTION__)` 输出了当前执行的函数名"main",这对于调试和日志记录也有帮助,尤其是在大型项目中跟踪函数调用流程时。 这些预处理器宏在STM32单片机编程中同样适用,因为STM32通常使用基于GCC的编译器,如GNU Arm Embedded Toolchain,这些编译器都支持C语言的标准特性。在开发STM32应用时,这些宏可以帮助开发者实现更好的错误跟踪、调试信息输出和日志记录功能,从而提高开发效率和代码质量。当遇到运行时错误或需要对代码进行性能分析时,这些信息尤其有价值。

@Component public class AuthUtil { private final RedisTemplateUtil<String, Object> permRedisManager; public AuthUtil(RedisTemplateUtil<String, Object> permRedisManager) { this.permRedisManager = permRedisManager; } public static final String SYS_EMPLOYEE_NAME = "sysEmployee"; public static final String MEMBER_NAME = "member"; public static final Long MEMBER_EXPIRES_TIME = 60L * 60 * 24; public static final Long SYS_EMPLOYEE_EXPIRES_TIME = 60L * 30; public String buildToken(String id, String name, Object loginObj) { String jwt = JWTBuilder.createJWT(id, name, loginObj); permRedisManager.set(id + "RF_AUTH", jwt, MEMBER_EXPIRES_TIME); String md5 = PasswordUtil.md5(jwt); if (name.equals(AuthUtil.SYS_EMPLOYEE_NAME)) { permRedisManager.set(PasswordUtil.md5(jwt), jwt, SYS_EMPLOYEE_EXPIRES_TIME); } else if (name.equals(AuthUtil.MEMBER_NAME)) { permRedisManager.set(PasswordUtil.md5(jwt), jwt, MEMBER_EXPIRES_TIME); } return md5; } public void removeToken(long id) { Object jetObj = permRedisManager.get(id + "RF_AUTH"); if (Validator.valid(jetObj)) { String md5 = PasswordUtil.md5((String) jetObj); permRedisManager.del(id + "RF_AUTH"); permRedisManager.del(md5); } } public String buildTokenWithExpires(String id, String name, Object loginObj) { String jwt = JWTBuilder.createJWTWithExpires(id, name, loginObj, 0); permRedisManager.set(id + "RF_AUTH", jwt); return jwt; } public String buildTokenWithExpires(String id, String name, Object loginObj, long time) { String jwt = JWTBuilder.createJWTWithExpires(id, name, loginObj, time); permRedisManager.set(id + "RF_AUTH", jwt); return jwt; } public void setPerm(long id, List<?> perms) { JSONArray array = (JSONArray) JSONArray.toJSON(perms); permRedisManager.set(id + "RF_AUTH_PERM", array.toJSONString()); } }这个类用于生成token和解析token,请问登录接口用java代码怎么写?@DeleteMapping("/deleteCode/{encode}") public JsonData<User> deleteCode(@PathVariable String encode) 接口在vue前端如何访问?

2023-06-08 上传