小编Moh*_*Ezz的帖子

如何将宏定义从"make"命令行参数(-D)传递给C源代码?

我通常使用选项:-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 macros makefile

93
推荐指数
4
解决办法
10万
查看次数

从C中同一目录中的另一个文件调用函数

我正在学习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上产生多重定义错误

c linker gcc header

23
推荐指数
1
解决办法
6万
查看次数

为什么相同的java字符串采用相同的地址?

可能重复:
使用new创建String对象及其与intern方法的比较

我正在玩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分配给同一个对象?或者我在字符串的基础机制中遗漏了什么?

java string javac

8
推荐指数
2
解决办法
876
查看次数

标签 统计

c ×2

gcc ×1

header ×1

java ×1

javac ×1

linker ×1

macros ×1

makefile ×1

string ×1