2013-12-11 5 views
-1

동일한 C 파일의 함수를 사용하여 상수를 정의하려고합니다.C에서 함수로 상수 정의하기

나는 상수를 정의하려면 :

#define a 2 
#define b 5 
#define power PowerOf(a,b) 

PowerOf는 서명 내가 코드에서 나중에 구현하는 기능 일 때 :

int PowerOf(int base,int exp) 

가 나는 또한 시작 부분에서의 선언은 코드의

그럴 수 있습니까? 내가하려고하면 컴파일러 나에게 오류를 제공하기 때문에 다음과 같이

변수 크기의 객체가

감사

답변

3

아니요. macros은 컴파일 단계 전에 전처리기에 의해 확장되기 때문에. 그들은 시간 상수를 컴파일해야합니다. 그러나 abconst int을 모두 만들 수 있습니다. 정수 상수 일 수 있습니다.

+0

나는 ... 불행하게도 나의 assigment는 내가 H 파일에서 #define으로 이미 정의 된 const 중 하나를 가지고있어서 나는 바꿀 수 없다. 어쨌든 고마워! – Mike

3

이 매우 dangeorous 오류가 발생하기 쉬운입니다 초기화 할 수 없습니다 [오류] :

이 파일을 포함 할 때마다
#define a 2 
#define b 5 

, 모든 ab 변수는 살전로 대체됩니다 e 값!

+0

어쩌면 당연 하겠지만 질문에 답변하지 않습니다. 또한 OP는 'POWER'와 'BASE'대신 'a'와'b '를 사용하여 단축 할 수 있습니다. – mvp

+0

그들은 단지 더미 변수 일 뿐이며, 실제로 함수에서 사용하지 않습니다. 내가 가진 문제의 예일뿐입니다. – Mike

2

#define은 단순히 매크로 대체입니다. 실제 상수가 아닙니다.

당신이 그것을하려는 방식으로, #define power ...은 상수가 될 수 없습니다 - 그것은 컴파일 타임이 아닌 런타임에 여전히 호출됩니다.

0

이상한/부적절한/오류가 발생하기 쉬운 방법으로 정의를 사용한다는 다른 답변에 동의하십시오. 다음은 원래 질문에서 질문했던 것을 수행하는 작업 프로그램입니다.

#include <math.h> 
#include <stdio.h> 

#define A 7 
#define B 2 


int powerOf(double x, double y); 

#define SUPERPOWER powerOf(A,B) 


int main() { 
    printf("%d", SUPERPOWER); 
    return 0; 
} 

int powerOf(double x, double y) { 
    return (int)trunc(pow(x,y)); 
} 
관련 문제