class aaa {
        static void bbb (int a ,params string[] strs) {
        }
    }

    static void Main () {
        int a = 1;
        int b = 2;
        bbb(a,"foo","bar","baz");
        bbb(b);
    }
}

 

 

출처: http://qiita.com/satotin/items/81e1e9c41181c9766de6

저작자 표시
신고
by 흥배 2016.02.11 08:00

C++에서는 로그를 남기기 위해 로그 라이브러리를 만들 때 꼭 사용하는 것이 가변인수와 매크로입니다.

가변인수를 사용하여


void LogMessage( LPCTSTR format, ... )

{

char SBody[ MAX_PATH ] = { 0, };

va_list strlist;

va_start( strlist, format );

_vsntprintf_s( SBody, _countof(SBody), _TRUNCATE, format, strlist );

va_end( strlist );

}



이런 식으로 하나의 메시지를 만들고

이 LogMessage함수를 어디서, 언제 호출했는지 알리는 방법은 __FILE__, __LINE__, __FUNCTION__ 와 같은 매크로를 사용합니다.


이런 기능을 닷넷에서 구현하려면 가변인수는 다음과 같은 방식으로 구현 합니다. 


public void print(int i, params string[] messages)

{

string logmsg;


foreach (string msg in messages)

logmsg += msg;


}



그리고 __FILE__, __LINE__, __FUNCTION__ 매크로는 닷넷의 어트리뷰트를 사용합니다.

using System.Runtime.CompilerServices;

using System.Diagnostics;


void LogToUI(string logText,

[CallerFilePath] string fileName = "",

[CallerMemberName] string methodName = "",

[CallerLineNumber] int lineNumber = 0)

{

string logmsg = string.Format("[줄:{0}|호출:{1}|시간{2}] : {3}", lineNumber, methodName, DateTime.Now.ToShortTimeString(), logText);

listBoxLog.Items.Add(logmsg);

}


// 사용 

LogToUI("서버 생성 성공");

저작자 표시
신고
by 흥배 2013.12.02 08:00
| 1 |