C 語言有些預先定義的巨集 ( Standard Predefined Macros ) ,
可以直接印出行數、檔案名稱、函數名稱 ...
-
例如 :
如果要用 printf 印出行數時 , 不需要特別針對每一行去寫每一行的行數 ,
也不用因爲前面多了幾行程式 , 就要把後面 printf 要印出的行數全部重新寫
以下是一些較常用到的巨集
- __LINE__ - 印出行數
- __FILE__ - 印出檔案名稱
- __GNUC__ - 印出 gcc 版本
- __func__ , __FUNCTION__ - 印出函數名稱
- __DATE__ - 印出日期
- __TIME__ - 印出時間
-
比較特別的是 __func__ , __FUNCTION__ 兩種方式都可印出函數名稱
以下是 gcc 的網站中的define ,
# if __STDC_VERSION__ < 199901L
# if __GNUC__ >= 2 /* 當 __GNUC__ >= 2 */
# define __func__ __FUNCTION__ /* __func__ , __FUNCTION__ 兩種都可以使用 */
# else /* 當 __GNUC__ < 2 */
# define __func__ "<unknown>" /* 只能使用__func__ 這種方式 */
# endif
# endif
-
以下是測試的程式
1 #include <stdio.h>
2
3 void main(void)
4 {
5 printf("\nline : %d\n", __LINE__);
6 printf("file : %s\n", __FILE__);
7
8 printf("\n__GNUC__ : %d\n", __GNUC__);
9 printf("function (__func__) : %s\n", __func__);
10 printf("function (__FUNCTION__) : %s\n", __FUNCTION__);
11
12 printf("\ndate : %s\n", __DATE__);
13 printf("time : %s\n", __TIME__);
14
15 printf("\nline : %d\n", __LINE__);
16 }
-
以下是測試的結果
line : 5
file : predefined_macros.c
__GNUC__ : 4
function (__func__) : main
function (__FUNCTION__) : main
date : Oct 19 2017
time : 17:39:48
line : 15
ref : https://stackoverflow.com/questions/7008485/func-or-function-or-manual-const-char-id
沒有留言:
張貼留言