我通常使用选项:-Dname = value将宏定义从"make命令行"传递给"makefile".该定义可在makefile中访问.
我还使用类似的编译器选项将宏定义从"makefile"传递到"源代码":-Dname = value(在许多编译器中都支持).可以在源代码中访问此定义.
我现在需要的是允许我的makefile用户能够立即将"make.exe命令行"中的任意宏定义传递给"源代码",而无需更改makefile中的任何内容.
所以用户可以输入:make -f mymakefile.mk -SOMEOPTION var = 5
然后直接代码main.c可以看到var:
int main()
{
int i = var;
}
Run Code Online (Sandbox Code Playgroud) 我正在学习C,但我对Java等高级编程语言有很长的经验.
我正在阅读有关头文件的内容,所以我正在玩它们,但是我注意到我可以从另一个文件调用一个函数而不用#including它(它在同一个目录中),这怎么可能?是make文件,配置那种方式的链接器还是什么?
我们有两个文件
main.c
add.c
Run Code Online (Sandbox Code Playgroud)
main.c add(int x,int y)从add add.c 调用函数,但是在#including add.c之前我错误地编译了它并且它工作了!更令人困惑的是,当我#include add.c时,它会在函数add上产生多重定义错误
我正在玩Strings来更多地理解它们,我发现了一些我无法解释的东西:
String str1 = "whatever";
String str2 = str1;
String str3 = "whatever";
System.out.println(str1==str2); //prints true...that's normal, they point to the same object
System.out.println(str1==str3); //gives true..how's that possible ?
Run Code Online (Sandbox Code Playgroud)
最后一行是如何实现的?这意味着str1和str3在内存中都具有相同的地址.
这是一个足够智能的编译器优化来检测两个字符串文字是否相同("无论什么")并因此将str1和str3分配给同一个对象?或者我在字符串的基础机制中遗漏了什么?