3

, 나는C는 선택적 null 매개 변수를 지원합니까? 유사한 기능이 C에서 거기에 파이썬에서

def send_command(command, modifier = None): 

같은 것들을 사용 해요 다음 수정 인수는 선택 사항이며, 인수가없는 경우는 0의 인수 구별 할 수 있는가? 나는이 같은, C, 및 인터넷 검색과 경험 해요,하지만 당신이 유사하게 할당 할 수 있습니다 보인다 C에서 선택적 매개 변수를 사용하는 방법에 대한 명확한 진술을 찾을 수 없습니다 :

void send_command(uint8_t command, uint8_t modifier = 0) { 

그래서 2 번째의 인수가 선택 사항이며 사용하지 않으면 기본값은 0입니다. (편집 : 아니,이 무효 C는 어쨌든) 함수가 send_command(SOMETHING)send_command(SOMETHING, 0) 사이

그러나 구별 할 수 있습니까? 이상적으로 두 번째 매개 변수는 0을 포함하여 uint8 값이 될 수 있습니다.

NULL이 0과 다를 수 있습니까?

void send_command(uint8_t command, uint8_t modifier = NULL) { 
+0

참조 : [C로 함수 오버로딩] (http://stackoverflow.com/questions/479207/function-overloading-in-c) – Sjoerd

답변

6

C는 선택적 매개 변수를 지원하지 않습니다. 비슷한 효과를 내기 위해 종종 사용될 수있는 함수 오버로딩을 지원하지도 않습니다.

+0

그 이유는 문제가있을 수 있습니다. 그래서 0의 기본값을 할당하는 내 예제는 C++에서만 유효할까요? – endolith

+3

수정. 이것은 C++의 기본 인수로 알려져 있습니다. –

1

C 프로그래밍 언어에는 선택적 매개 변수가 없습니다. C++은 그렇지만 "많은 현대 프로그래밍 언어의 어머니"C는 그렇지 않습니다 ...

2

다른 사람들이 말했듯이 C는 선택적 매개 변수가 없습니다.

NULL0의 차이는 there isn't much of one입니다.

9

선택적 매개 변수는 가변 인자 매크로 C99에서 가능합니다 :

#define JUST3(a, b, c, ...) (a), (b), (c) 
#define FUNC(...) func(JUST3(__VA_ARGS__, 0, 0)) 

지금 FUNC(x)func((x), (0), (0))로 확장, FUNC(x,y)func((x), (y), (0))로 확장 등

+7

나는 울거나 웃을지를 묻지 않는다. – pmg

+0

과부하를보고 싶지 않니? ;-) –

+2

그리고 불행히도'FUNC (x, y, z, t)'는 에러가 아닌'func ((x), (y), (z))'로 확장됩니다.중요한 것은 과부하를 원하는 사람을 단지 * 약간 * 처벌하는 것입니다. 그들이 최소한 그것을 기대할 때. –

2

다른 C 함수의 기본 인수를 지원하지 않습니다 말했듯 직접. 그러나 매크로로이를 수행하는 방법이 있습니다. P99에는이 기능을 비교적 쉽게 지정할 수있는 편리한 "메타"매크로가 있습니다. 예로 pthread_mutex_init 함수의 두 번째 인수 지정을 반복해야 피하기 위해 : 나중에 여기에 기본 인수의 평가의 의미

pthread_mutex_init(&my_mutex); 

를 사용하는

P99_PROTOTYPE(int, pthread_mutex_init, pthread_mutex_t*, pthread_mutexattr_t const*); 
#define pthread_mutex_init(...) P99_CALL_DEFARG(pthread_mutex_init, 2, __VA_ARGS__) 
P99_DECLARE_DEFARG(pthread_mutex_init, , (pthread_mutexattr_t*)0); 

하고 정직하면 동일 C++의 경우, 기본 인수의 평가 컨텍스트는 선언의 컨텍스트입니다. 평가 컨텍스트가 매크로 호출의 컨텍스트 인 방식으로이를 지정할 수도 있습니다.