不同的結果,我有以下的C程序:C代碼宏產生使用文字VS可變
#include <stdio.h>
#include <math.h>
#define LOG2(x) ((int)(log((double)(x))/log(2)))
int main() {
int num = 64;
int val1 = LOG2(num);
int val2 = LOG2(64);
printf("val1: %d, val2 %d\n", val1, val2);
return 0;
}
,其輸出:
val1: 5, val2: 6
爲什麼這個宏時我產生不同的(和錯誤)的答案在一個變量中使用它,但是當我直接輸入64時能正常工作嗎?
不管這是否是獲取日誌庫2的好方法,是什麼導致了這種行爲?有什麼辦法可以讓這個宏與變量正常工作嗎? (我所有的輸入都是2的精確冪)
對我來說,兩者都顯示'5':_http://ideone.com/QSVioZ_ –
對我來說,兩者都是6.你能告訴你正在使用哪臺機器和編譯器嗎? – Harveer
這個問題似乎是你在宏中轉換爲'(int)'。刪除轉換允許'LOG2'返回與聲明爲'double'的值相同的值。 –