定义 USE(x) (x) = (x)

发布于 2024-10-02 10:32:05 字数 317 浏览 2 评论 0原文

在其中一个 C 源代码文件中,我发现了以下行(宏):

#define USE(x) (x) = (x)

它的用法如下:

int method(Obj *context)
    {
    USE(context);
    return 1;
    }

在谷歌搜索后,我发现了以下描述:

// 删除某些编译器的宏 警告

你能告诉我更多关于这个宏的信息吗?

感谢您的回答!

In one of the C source code files I found the following line (macro):

#define USE(x) (x) = (x)

It is used like this:

int method(Obj *context)
    {
    USE(context);
    return 1;
    }

After googling for it, I found the following description:

// Macro to get rid of some compiler
warnings

Could you please tell me more about this macro?

Thanks for your answers!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

梦过后 2024-10-09 10:32:05

当变量从未真正用于任何用途时,一些编译器会抱怨。例如:

int main(int argc, char **argv) {
  return 0;
}

给出:

Output from llvm C/C++/Fortran front-end (llvm-gcc)

/tmp/webcompile/_7618_1.c: In function 'main':
/tmp/webcompile/_7618_1.c:9: warning: unused parameter 'argc'
/tmp/webcompile/_7618_1.c:9: warning: unused parameter 'argv'

奇怪的是,我可以使用你的宏来消除这些警告:

#define USE(x) (x) = (x)


int main(int argc, char **argv) {
  USE(argc); /* get rid of warnings */
  USE(argv); /* get rid of warnings */
  return 0;
}

Some compilers complain when variables are never actually used for anything. for instance:

int main(int argc, char **argv) {
  return 0;
}

Gives:

Output from llvm C/C++/Fortran front-end (llvm-gcc)

/tmp/webcompile/_7618_1.c: In function 'main':
/tmp/webcompile/_7618_1.c:9: warning: unused parameter 'argc'
/tmp/webcompile/_7618_1.c:9: warning: unused parameter 'argv'

Queerly, I can just get rid of those warnings using your macro:

#define USE(x) (x) = (x)


int main(int argc, char **argv) {
  USE(argc); /* get rid of warnings */
  USE(argv); /* get rid of warnings */
  return 0;
}
ゃ人海孤独症 2024-10-09 10:32:05

当定义/声明变量但从未使用过时,编译器会发出警告。其中包括函数参数。某些编码风格要求始终命名函数参数,但其中一些可能不会在函数中使用。它们被保留以供将来使用。对于这些情况,您可以USE(param)来避免警告

The compilers give warnings when a variable is defined/declared but never used. These include function arguments. Some coding styles require to always name function arguments, but some of them may not be used in the function. They are reserved for future use. For these cases you could USE(param) to avoid the warning

失眠症患者 2024-10-09 10:32:05

使用 gcc,您可以使用 __attribute__((unused)) 来抑制警告。

With gcc you can use __attribute__((unused)) to suppress the warning.

娜些时光,永不杰束 2024-10-09 10:32:05

如果局部变量未在定义的函数中使用,大多数(如果不是全部)主要编译器都会发出警告。我想象宏对某个变量进行任意操作,以确保没有为该变量标记警告。

void func1(void)
{
    int unusedVariable = 0;
    /* do stuff without using unusedVariable */
} /* warning about not using unusedVariable */

void func2(void)
{
    int unusedVariable = 0;
    USE(unusedVariable);
    /* do stuff without using unusedVariable */
} /* no warning is issued */

Most (if not all) major compilers will offer warnings if local variables are not used within the function they are defined. I imagine that macro does an arbitrary operation on some variable to ensure that no warning is flagged for the variable.

void func1(void)
{
    int unusedVariable = 0;
    /* do stuff without using unusedVariable */
} /* warning about not using unusedVariable */

void func2(void)
{
    int unusedVariable = 0;
    USE(unusedVariable);
    /* do stuff without using unusedVariable */
} /* no warning is issued */
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文