如果我想扩展一个C宏,有什么好方法可以做到这一点(除了手动跟踪)?
例如,GTK_WIDGET_SET_FLAGS它使用一个使用宏的宏(或两个)......
我希望看到它以某种方式自动扩展,而不是搜索每一个宏,每一步.
我试过cpp,但似乎只做了第一次传球
上:
GTK_WIDGET_SET_FLAGS(obj, 13)
Run Code Online (Sandbox Code Playgroud)
我扩展了包含文件,然后:
G_STMT_START{ ((GTK_OBJECT_FLAGS (obj)) |= (13)); }G_STMT_END
Run Code Online (Sandbox Code Playgroud)
这是由这些错误消息解释我在stderr上得到这个(当使用-o filename时)
gtk/gtkwidget.h:34:21: gdk/gdk.h: No such file or directory gtk/gtkwidget.h:35:31: gtk/gtkaccelgroup.h: No such file or directory gtk/gtkwidget.h:36:27: gtk/gtkobject.h: No such file or directory gtk/gtkwidget.h:37:31: gtk/gtkadjustment.h: No such file or directory gtk/gtkwidget.h:38:26: gtk/gtkstyle.h: No such file or directory gtk/gtkwidget.h:39:29: gtk/gtksettings.h: No such file or directory gtk/gtkwidget.h:40:21: atk/atk.h: No such file or directory
gtk,atk和gdk目录都在当前的工作目录中,那么如何让cpp在其中搜索呢?
顺便说一句,gcc -E给出完全相同的输出cpp
通过使用gcc -E并使用-I选项传递include目录来解决包含路径问题
我正在浏览GCC手册页,我找到了以下行:
file.i
C source code that should not be preprocessed.
Run Code Online (Sandbox Code Playgroud)
我知道运行gcc -E foo.c在预处理后会停止编译器; 但是创建.i文件的真实世界应用是什么.
还有一种方法可以生成.i除以外的文件gcc foo.c -E > foo.i吗?
我尝试理解 LLVM 程序的高级结构。我在书中读到“程序由模块组成,每个模块对应于翻译单元”。有人可以更详细地解释我上面的内容以及模块和翻译单元之间的区别是什么(如果有的话)。我也有兴趣知道翻译单元启动并完成调试信息编码时调用哪部分代码?
我收到的错误就像是"预期的声明"
我的代码如下
#define IN_Tamper 0X00001000 /*P2.12 = EINT2*/
#define DIR_IN_Tamper { FIO2DIR &= ~0X00001000 ; }
/* main */
DIR_IN_Tamper();
if(((IN_Tamper >> 12) & 0x01) == 1)
BUZZER_ON();
else
BUZZER_OFF();
Run Code Online (Sandbox Code Playgroud)
我收到错误说
预期DIR_IN_Tamper()的声明;
期待对其他部分的陈述.....
是否可以扩展#includec++ 文件的行,可能使用C预处理器,这样我就可以读取扩展文件而#includes不是#included的文件?
具体来说,如果我有
文件A.cpp:
#include "fileB.H"
int main()
{
//do whatever
return(0);
}
Run Code Online (Sandbox Code Playgroud)
文件B.H:
#include "fileC.H"
//Some lines of code
Run Code Online (Sandbox Code Playgroud)
文件C.H
//Some other lines of code
Run Code Online (Sandbox Code Playgroud)
和输出:
//Some other lines of code
//Some lines of code
int main()
{
//do whatever
return(0);
}
Run Code Online (Sandbox Code Playgroud)
本质上,将包含的文件复制粘贴到一个大型文本/C++ 代码文件中,而不进行编译?
如果我使用相关运行 cpp,-I<Directory containing files to include>那么我会得到一个长文本文件,但不仅仅是代码,它给出了将传递给编译器的内容(废话!)
#include<stdio.h>
#define begin(m,a,i,n) m##a##i##n
#define start begin(m,a,i,n)
void start() {
printf("Hello");
}
Run Code Online (Sandbox Code Playgroud)
是的,是的,我确实看到了这些字母,m a i n但是它们是如何组合在一起并起作用的?
调试器...似乎对这个程序没有帮助。
我在导航和搜索 stdio.h 的文件描述符在机器中的存储位置时遇到了 -E 的这个选项?但我不确定这个命令 gcc -E 到底是做什么的?可以用来查看/usr/include/目录下stdio.h文件的文件描述符吗?