__DATE__,__FILE__,__LINE__,__TIME__,__FUNCTION__

本文详细介绍了C99标准中预定义的宏,包括__DATE__、__FILE__、__LINE__、__TIME__及__FUNCTION__等,并通过示例展示了如何使用这些宏来辅助调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C99 ( ISO/IEC 9899:1999 ) 网上有pdf文件。


C标准中指定了一些预定义的宏,对于编程经常会用到。下面这个表中就是一些常常用到的预定义宏。

__DATE__
进行预处理的日期(“Mmm dd yyyy”形式的字符串文字

__FILE__
代表当前源代码文件名的字符串文字

__LINE__
代表当前源代码中的行号的整数常量

__TIME__
源文件编译时间,格式微“hh:mm:ss”

__FUNCTION__(__fucn__)
当前所在函数名


       对于__FILE__,__LINE__,__func__这样的宏,在调试程序时是很有用 的,因为你可以很容易的知道程序运行到了哪个文件的那一行,是哪个函数。

       下面一个例子是打印上面这些预定义的宏的。


#include <stdio.h>
#include <stdlib.h>
void why_me();
int main()
{
    printf( "The file is %s./n", __FILE__ );
    printf( "The date is %s./n", __DATE__ );
    printf( "The time is %s./n", __TIME__ );
    printf( "This is line %d./n", __LINE__ );
    printf( "This function is %s./n", __FUNCTION__ );
    why_me();
    return 0;
}

void why_me()
{
    printf( "This function is %s/n", __func__ );
    printf( "The file is %s./n", __FILE__ );
    printf( "This is line %d./n", __LINE__ );
}

### F_trig 函数或触发器实现与用法 在 Oracle 数据库环境中,`F_trig` 可能是一个自定义函数或者触发器的名字。以下是关于如何创建和使用 `F_trig` 的具体示例。 #### 创建带有输入参数的函数 可以基于引用内容构建一个名为 `F_trig` 的函数,该函数接受日期类型的输入参数并返回特定的结果: ```sql CREATE OR REPLACE FUNCTION F_trig (td IN DATE) RETURN VARCHAR2 IS result VARCHAR2(100); BEGIN -- 假设我们希望返回传入日期的星期几 result := TO_CHAR(td, 'DAY'); RETURN TRIM(result); -- 返回去除多余空格后的结果 END; / ``` 上述代码展示了如何创建一个简单的函数来处理日期,并将其转换为对应的星期名称[^2]。 #### 使用游标和条件过滤的复杂触发器 当涉及到更复杂的逻辑时,可能需要结合游标以及动态查询。下面的例子展示了一个触发器,它利用了带参数的游标概念: ```sql CREATE OR REPLACE TRIGGER F_trig AFTER INSERT ON emp FOR EACH ROW DECLARE CURSOR c(v_deptno emp.deptno%TYPE, v_job emp.job%TYPE) IS SELECT ename FROM emp WHERE deptno = v_deptno AND job = v_job; employee_name emp.ename%TYPE; BEGIN OPEN c(:NEW.deptno, :NEW.job); LOOP FETCH c INTO employee_name; EXIT WHEN c%NOTFOUND; DBMS_OUTPUT.PUT_LINE('Inserted Employee Name: ' || employee_name); END LOOP; CLOSE c; END; / ``` 此触发器会在向表 `emp` 插入新记录之后执行操作,通过游标筛选符合条件的数据条目[^3]。 #### 动态 SQL 执行功能扩展 对于某些高级场景下,比如调用外部命令行工具获取额外信息的情况,可以通过 UDF(用户定义函数)完成类似任务。这里给出 MySQL 下的一个例子作为参考: ```sql -- 首先确认系统允许加载UDFs SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'NO_ENGINE_SUBSTITUTION','')); -- 删除已存在的同名函数以防冲突 DROP FUNCTION IF EXISTS sys_exec; DROP FUNCTION IF EXISTS sys_eval; -- 注册新的UDF用于执行操作系统指令 CREATE FUNCTION sys_exec RETURNS INTEGER SONAME 'lib_mysqludf_sys.so'; CREATE FUNCTION sys_eval RETURNS STRING SONAME 'lib_mysqludf_sys.so'; -- 调用这些函数运行任意shell命令 SELECT sys_eval('echo Hello World!'); SELECT sys_exec('touch /tmp/testfile.txt'); -- 创建测试文件验证权限 ``` 尽管这是针对MySQL环境下的特殊用途案例说明[^5],但在实际生产环境下不建议滥用此类特性以免带来安全隐患。 ### 注意事项 以上提供的实例仅作教学目的演示之用,请根据实际情况调整语法细节以适配目标数据库版本及相关配置需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值