首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cc -switch (或其他“自动”机制)使函数在模块中保持静态

cc -switch (或其他“自动”机制)使函数在模块中保持静态
EN

Stack Overflow用户
提问于 2017-07-07 08:04:48
回答 2查看 34关注 0票数 0

我有两个以前独立的模块,比如 that.c the .c,现在我想将它们一起编译为cc .c.c -o --不管什么--不要担心只有一个main(),等等;这些都被处理好了,所有的事情都会正常运行,除了下面的.

每个模块包含几十个(可能在所有50个模块中)“重复”函数;名称相同,但行为略有不同。我也从不费心宣布它们是静态的。我开始用那个关键字进行编辑,这本身就很长,但也是可行的。不幸的是,我还在调用它的其他函数中声明了每个函数,所以我必须编辑每个函数的入口点本身,以及每个调用任何其他函数的函数。所以现在这是个麻烦的烂摊子。

别警告我模块太大了,等等,等等。是的,这是我自己造成的混乱。但是我的时光机在商店里,所以没有必要纠缠这一点。

我想找到(但不能)的是一些-automatically-treat-all-functions-static-in-their-own-modules之类的cc -switch。那么,的问题是:有什么方法可以做到这一点,而不需要在任何地方都进行详尽的编辑呢?

(P.S.其他类型的解决方案确实有效,例如,我可以分别编译它们,并有“主”一个popen()另一个并读取它的输出。但这就产生了一个麻烦的用户安装体验,我想避免。所以,将它们编译在一起是我能想到的唯一的解决方案,那就是将所有“内部”保持在内部。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-07 08:12:22

如果您有两个具有相同名称但在不同模块中的函数,则必须在这两个函数上使用static关键字,否则在将对象链接到一起时会混淆链接器。

所以,没有办法自动为你做这件事。

良好的实践是,模块中的每个私有函数都应该声明为静态函数,以防止出现问题。

如果模块之间是完全不同的(一个模块对另一个模块没有任何依赖),那么就没有任何问题,除非您有来自两个模块的具有相同名称的公共用途的函数。

代码语言:javascript
复制
//This approach is OK
that.c:
static int myfunc(void) {
    return 5;
}

this.c:
static int myfunc(void) {
     return 6;
}

这两个函数是完全不同的,并且只能在模块中看到。

票数 1
EN

Stack Overflow用户

发布于 2019-09-26 01:23:27

我最近编写了一段代码,生成大量随机数,然后使这些值保持静态(而不是每次打开工作表时重新计算函数)。

代码语言:javascript
复制
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

希望能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44965652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档