我有两个以前独立的模块,比如 that.c 和 the .c,现在我想将它们一起编译为cc .c.c -o --不管什么--不要担心只有一个main(),等等;这些都被处理好了,所有的事情都会正常运行,除了下面的.
每个模块包含几十个(可能在所有50个模块中)“重复”函数;名称相同,但行为略有不同。我也从不费心宣布它们是静态的。我开始用那个关键字进行编辑,这本身就很长,但也是可行的。不幸的是,我还在调用它的其他函数中声明了每个函数,所以我必须编辑每个函数的入口点本身,以及每个调用任何其他函数的函数。所以现在这是个麻烦的烂摊子。
别警告我模块太大了,等等,等等。是的,这是我自己造成的混乱。但是我的时光机在商店里,所以没有必要纠缠这一点。
我想找到(但不能)的是一些-automatically-treat-all-functions-static-in-their-own-modules之类的cc -switch。那么,的问题是:有什么方法可以做到这一点,而不需要在任何地方都进行详尽的编辑呢?
(P.S.其他类型的解决方案确实有效,例如,我可以分别编译它们,并有“主”一个popen()另一个并读取它的输出。但这就产生了一个麻烦的用户安装体验,我想避免。所以,将它们编译在一起是我能想到的唯一的解决方案,那就是将所有“内部”保持在内部。)
发布于 2017-07-07 08:12:22
如果您有两个具有相同名称但在不同模块中的函数,则必须在这两个函数上使用static关键字,否则在将对象链接到一起时会混淆链接器。
所以,没有办法自动为你做这件事。
良好的实践是,模块中的每个私有函数都应该声明为静态函数,以防止出现问题。
如果模块之间是完全不同的(一个模块对另一个模块没有任何依赖),那么就没有任何问题,除非您有来自两个模块的具有相同名称的公共用途的函数。
//This approach is OK
that.c:
static int myfunc(void) {
return 5;
}
this.c:
static int myfunc(void) {
return 6;
}这两个函数是完全不同的,并且只能在模块中看到。
发布于 2019-09-26 01:23:27
我最近编写了一段代码,生成大量随机数,然后使这些值保持静态(而不是每次打开工作表时重新计算函数)。
function myFunction() {
function randnumber() {
var sheet = SpreadsheetApp.getActive().getSheetByName("sheet1");
var range = sheet.getRange("A1:Z192000");
for (var x = 1; x <= range.getWidth(); x++) {
for (var y = 1; y <= range.getHeight(); y++) {
var number = Math.floor(Math.random() * 8999999999) + 1000000000;
range.getCell(y, x).setValue(number);
}
}
var sheet = SpreadsheetApp.getActive().getSheetByName("sheet1");
var entries = [{
name : "Numbers: 1-9",
functionName : "numbers19"
}];
//the function above generates the random numbers and fills them in each cell
function copyFormulasToValues() { var ss = SpreadsheetApp.getActiveSpreadsheet();
var sourceSheet = ss.getSheetByName("Sheet1");
var destinationSheet = ss.getSheetByName("Sheet1");
var range = sourceSheet.getRange(1,1,1,1);
}
}
//the above function keeps the function static希望能帮上忙。
https://stackoverflow.com/questions/44965652
复制相似问题