2014-12-03 7 views
0

나는 지금 코드를 디버깅 중이지만 바이너리 호환성을 유지해야한다. 이제는 함수 매개 변수의 기본값에 대한 수정이 있습니다.함수 매개 변수의 기본값을 삭제해도 여전히 바이너리 호환성이 유지됩니까?

void functionName(const type parameter = class::A::getValue()); 

지금은 그냥이 같은 변경하려는 :이 바이너리 호환성 여전히

void functionName(const type parameter); 

인가?

+3

아마도 (기본 인수가 호출자에 의해 생성되었으므로 함수가 호출되는 방법에 영향을 미치지 않아야하므로) ABI에 따라 다를 수 있습니다. –

+0

@MikeSeymour 마이크 감사합니다! 함수가 어떻게 호출되는지는 영향을 미치지 않기 때문에 함수의 시그니처를 변경해서는 안됩니다. – DONG

답변

0

기본 매개 변수는 함수 유형을 변경하지 않습니다. GCC 4.9.1 경고없이이 코드를 컴파일합니다

#include <iostream> 
using namespace std; 

static void f (int x) { 
    cout << x << endl ; 
} 
static void g() ; 

int main() { 
    f (99) ; 
    g() ; 
    return 0 ; 
} 

static void f (int x = 101) ; 

static void g() { 
    f() ; 
} 

다시 선언의 연결이 변경되지 않습니다 것을 의미 여기에 허용되는 기본 매개 변수 값을 취할 f을. 그럼 괜찮을거야.

+0

재 선언은 다시 정의되지 않습니다. 함수를 다시 정의 할 수 없습니다. – rubenvb

+0

@rubenvb : 고맙습니다! 그에 따라 내 대답을 편집했습니다. – TonyK

관련 문제