2013-12-11 45 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變量將與THES取代e值!

+0

你也許是對的,但它不會試圖回答一個問題。另外,OP可能使用'a'和'b'代替'POWER'和'BASE'來縮短它。 – 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)); 
}