我试图在同一个C文件中使用函数来定义一个常量。
我想定义一个常量:
#define a 2
#define b 5
#define power PowerOf(a,b)
当PowerOf是我实现的函数时稍后在代码中使用签名:
int PowerOf(int base,int exp)
我也在守则的开头宣布。
我能这样做吗?因为当我尝试时,编译器给出了如下错误:
[错误]可能无法初始化可变大小的对象
由于
答案 0 :(得分:3)
这非常危险且容易出错:
#define a 2
#define b 5
每当您要包含此文件时,所有a
和b
变量都将替换为这些值!
答案 1 :(得分:3)
没有。因为macros在编译阶段之前由预处理器扩展。它们必须是编译时常量。但是,您可以同时生成a
和b
const int
,然后它们将是整数常量。
答案 2 :(得分:2)
#define
只是一个宏替换 - 而不是一个真正的常量。
在某种程度上,你试图这样做,你的#define power ...
不能是一个常量 - 它仍将在运行时调用,而不是在编译时调用。
答案 3 :(得分: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));
}