표준은 아닌걸로 압니다. 그렇기 때문에 컴파일러마다 다릅니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
__FILE__과 __LINE__, 그리고 __func__(C99)는 기정의 상수(predefined constants)입니다.
__FILE__과 __LINE__을 지정하는 데는 #define이 아닌 #line(표준인진 잘 모르겠습니다)을 사용하며,
__func__를 지정하는 데는 굳이 따지자면 함수를 여는 중괄호가 사용되므로(억지스럽지만) 매크로 상수로 볼 수는 없으며,
매크로 함수는 아닙니다.
#define에 의해 지정되는 것은 매크로 함수(macro functions)와 상수(macro constants)가 있으며,
(매크로 함수의 원형(prototype)이라는 것이 말이 될는진 잘 모르겠지만)
어쨌든 매크로 상수에는 확실히 원형이 없고, 말씀하신 두 상수들은
__FILE__()이나 __LINE__()처럼 사용하지 않는 이상, 확실히 함수는 아닙니다. 따라서 원형은 없습니다.
원형 없습니다. 컴파일러에서 내부적으로 지원합니다.
컴파일러에서 지원하는 특수 매크로입니다. (매크로라고 해도 되나? -_-)
기지정 상수 정도라고 하는 것이 좋을 듯...
Predefined constant 라고 나와 있을 것 같은데...
C 표준 좀 읽어봐야겠네요.
define은 지정보단
define은 지정보단 정의 정도로(cf. declaration 선언) 옮기는 경향이 있어서,
기정의 상수 정도면 괜찮은 것 같습니다.
"그거 이름은 하늘이라고 합니다. 무사장님." - 제국군 가시나무 군단 312소대장 틸러 달비 부위
http://cppig1995.n-pure.net/mh || 몽화 대사전
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
대충의 순서도 같은것도 없나요?
compiler마다 사용하는 명령어가 다르니 원형이 없을 수도 있겠습니다만.
ansi c 에서 정의되어진 순서도나 뭐 그런거는 없을까요?
그런게 있어야 compiler업체들도 그걸 보고 구현을 했을것 같은데요.
표준은 아닌걸로
표준은 아닌걸로 압니다. 그렇기 때문에 컴파일러마다 다릅니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
__FILE__과 __LINE__은
__FILE__과 __LINE__은 ANSI/ISO C(C89/C90)와 AMD1(C95)를 거쳐 C99까지도 잘 표준입니다.
gcc 표준 기능(맞나?)이었던 __func__도 C99에서 표준이 되었습니다.
그러나 순서도 같은 건 없습니다.(함수가 아니니까요) 그냥 __FILE__은 파일이름 __LINE__은 줄번호고
#line으로 지정할 수 있다(이건 표준인지 헷갈립니다) 정도만 적혀 있습니다.
"그거 이름은 하늘이라고 합니다. 무사장님." - 제국군 가시나무 군단 312소대장 틸러 달비 부위
http://cppig1995.n-pure.net/mh || 몽화 대사전
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
함수가 아닐텐데요...
__FILE__, __LINE__ 은 C 표준에 정의되어 있지만 함수가 아닙니다.
#define 에 의해 기술되면 다 macro 함수라고 생각하시는 것 같은데
상수가 정의되면 macro 상수라고 하죠.
이경우는 #define 에 의해 기술되지 않으므로 predefined constant 정도라고 하지 않을까 싶네요.
__FILE__과 __LINE__,
__FILE__과 __LINE__, 그리고 __func__(C99)는 기정의 상수(predefined constants)입니다.
__FILE__과 __LINE__을 지정하는 데는 #define이 아닌 #line(표준인진 잘 모르겠습니다)을 사용하며,
__func__를 지정하는 데는 굳이 따지자면 함수를 여는 중괄호가 사용되므로(억지스럽지만) 매크로 상수로 볼 수는 없으며,
매크로 함수는 아닙니다.
#define에 의해 지정되는 것은 매크로 함수(macro functions)와 상수(macro constants)가 있으며,
(매크로 함수의 원형(prototype)이라는 것이 말이 될는진 잘 모르겠지만)
어쨌든 매크로 상수에는 확실히 원형이 없고, 말씀하신 두 상수들은
__FILE__()이나 __LINE__()처럼 사용하지 않는 이상, 확실히 함수는 아닙니다. 따라서 원형은 없습니다.
"그거 이름은 하늘이라고 합니다. 무사장님." - 제국군 가시나무 군단 312소대장 틸러 달비 부위
http://cppig1995.n-pure.net/mh || 몽화 대사전
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
__FILE__,__LINE__과 같은 기능을 하는 함수를 만들 수 있을까요?
제가 이 매크로들의 원형이 있는지 물어본것은
이것들과 똑같은 기능을 하는 함수들을 만들기 위해서 입니다.
혹시 이 같은 기능의 함수를 만들 수 있다면 어떻게 해야 하는지 아시는분
알려주시면 감사하겠습니다.
"불-가-능-합-니-다-!"
"불-가-능-합-니-다-!"
그런 함수가 있어도 전혀 쓸모가 없습니다. 왜냐 하면:
한 다음 getLineNumber()를 호출하면 언제든 3만 반환될 것이기 때문입니다.
"그거 이름은 하늘이라고 합니다. 무사장님." - 제국군 가시나무 군단 312소대장 틸러 달비 부위
http://cppig1995.n-pure.net/mh || 몽화 대사전
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
저도 몇년전에 회사
저도 몇년전에 회사 다닐때 선배사원한테 들은건데...
컴파일러에서 바이너리를 생성할 때 (아니면 preprocessing을 할때), 소스코드상에 __FILE__,__LINE__,(gcc에서는 __FUNCTION__도 가능)
이 검색되면 그에 해당하는 값의 상수로 대치하는 것으로 알고 있습니다.
예를 들어서, c파일의 100번째 줄에,
100: printf("%d",__LINE__);
이 있다면 소스코드 상에서는 저렇게 넣었지만
전처리과정에서
100: printf("%d",100);
으로 바뀐 다음에 컴파일을 한다는 뜻이죠.
정확하다고 말씀드릴순 없지만, 기본적인 동작은 이런 것으로 기억하고 있습니다.
그러므로, '원형'이라는게 존재하지 않죠.
댓글 달기