c - C preprocessor adds trailing "1" after expanding a macro defined in a command line
问题描述
$ echo 'MACRO();' | gcc -D'MACRO() hello' -E -P -
hello 1;
^ why 1?!!!!
Do you know why it adds trailing "1" after expanding the macro?
解决方案
-D 名称
将名称预定义为宏,定义为 1。
-D 名称=定义
将名称预定义为宏,并带有定义定义。定义的内容被标记和处理,就好像它们出现在#define 指令中的第三阶段一样。
所以你要:
$ echo 'MACRO();' | gcc -D'MACRO()=hello' -E -P -
hello;
注意定义中的等号。
至于为什么它没有它会做什么:空格是预处理器符号定义中的分隔符。所以预处理器将“hello”分配给符号。然后注意到定义中没有等号,所以它也附加了默认的“1”。这不是错误,它只是预处理器符号“中”的空格。
$ echo 'MACRO();' | gcc -D'MACRO() hello=foo' -E -P -
hello foo;
推荐阅读
- go - 如何在 http.Get Request 中使用双引号和冒号作为查询字符串?
- java - 关闭连接以防止 Java/ADF 中的泄漏
- java - 如何修复“找不到类型 [entity] 的属性 [repositoryMethod]!” 我什么时候使用继承实体的存储库?
- linux - Bash 脚本在第一次运行时总是失败,然后在重新运行后成功(粘贴命令)
- python - Project Euler # 81 最小路径总和 ** 代码为一个案例产生正确的结果,而为另一个案例产生错误的结果
- firebase - 如何在没有身份验证的情况下向 Firestore 添加安全规则?
- javascript - 导航问题 - 无法对未安装的组件执行 React 状态更新
- python - 如何在嵌套的 URL 抓取中传递单个链接?
- read-the-docs - 编号列表中的代码块弄乱了编号 python-markdown/mkdocs
- c++ - 纹理不适用于我在 C++ 和 OpenGL 中的立方体