【发布时间】:2014-04-19 16:58:40
【问题描述】:
我正在尝试在程序代码中使用#define,类似于此(简化为骨)示例代码:
#define M 20
#define N 10
void foo(int *a) {
if (a == M) { printf("Hello!\n"); }
else if (a == N) { printf("Goodbye!\n"); }
return;
}
int main(void) {
foo(M);
return(0);
}
尝试编译时,我得到以下错误输出:
main.cpp||In function ‘void foo(int*)’:|
main.cpp|6|error: ISO C++ forbids comparison between pointer and integer [-fpermissive]|
main.cpp|10|note: in expansion of macro ‘M’|
main.cpp|7|error: ISO C++ forbids comparison between pointer and integer [-fpermissive]|
main.cpp|11|note: in expansion of macro ‘N’|
main.cpp||In function ‘int main()’:|
main.cpp|15|error: invalid conversion from ‘int’ to ‘int*’ [-fpermissive]|
main.cpp|9|error: initializing argument 1 of ‘void foo(int*)’ [-fpermissive]|
||=== Build finished: 4 errors, 0 warnings (0 minutes, 0 seconds) ===|
现在,显然这里出了点问题。这段代码的目的是指定一个可以传递给原型的整数值,而不必在编写代码时记住整数的值。该技术似乎通常与套接字相关联使用,其中 AF_INET 和 AF_INET6 代表两个不同的整数值。这样,您就不必记住 IPv6 协议的值,如果这是您希望我们为套接字提供的值,您只需指定 AF_INET6。
问:我应该如何编写这段代码才能让它工作?
【问题讨论】:
-
现在,显然这里出了点问题。:错误消息确实使它显而易见。
-
@devnull 好的,但是通过指定 &M 而不是 M 并不能解决任何问题。它只会让事情变得更糟......
-
为什么
a甚至是一个指针? -
如果你能提到你想要达到的目标会更好。
-
为什么要将指针与固定数字进行比较?你想达到什么目标?你问的是 XY 问题恕我直言!
标签: c++ c c-preprocessor