最好的避免写作的方法是什么
someDataStruct.longSubStructName.anotherLongName.theVariable =
someStruct.longSubStructName.anotherLongName.theVariable + 10;
setter和getter是oop程序中的一个解决方案。但是,在例如C中,没有任何对象的情况下,处理这个问题的最佳方法是什么?
最佳答案
创建指向相关变量的指针:
int *someDataVar1 = &someDataStruct.longSubStructName.anotherLongName.theVariable;
int *someDataVar2 = &someStruct.longSubStructName.anotherLongName.theVariable;
*someDataVar1 = *someDataVar2 + 10;
如果在一个代码块中多次使用这样的深度嵌套字段,那么这样做有助于提高可读性。如果你只需要使用一次或两次,那么你最好还是保持原样。
下面是这样一个构造可能有意义的示例:
for (clientNum = 0; clientNum < clientCount; clientNum++) {
printf("name: %s\n", mainStructure.subStructure.clientList[clientNum].name);
printf("address: %s\n", mainStructure.subStructure.clientList[clientNum].address);
printf("identifier: %x\n", mainStructure.subStructure.clientList[clientNum].identifier);
printf("file count: %d\n", mainStructure.subStructure.clientList[clientNum].fileCount);
for (fileNum = 0; fileNum < mainStructure.subStructure.clientList[clientNum].fileCount; fileNum++) {
printf("filename: %s\n", mainStructure.subStructure.clientList[clientNum].fileList[fileNum].fileName);
printf("size: %d\n", mainStructure.subStructure.clientList[clientNum].fileList[fileNum].size);
printf("checksum: %d\n", mainStructure.subStructure.clientList[clientNum].fileList[fileNum].checksum);
mainStructure.subStructure.clientList[clientNum].fileList[fileNum].printed++;
}
mainStructure.subStructure.clientList[clientNum].printed++;
}
这里有很多冗长重复的信息。如此之多以至于很难看清你到底在用什么。可以使其更具可读性,如下所示:
for (clientNum = 0; clientNum < clientCount; clientNum++) {
struct client *thisClient = &mainStructure.subStructure.clientList[clientNum];
printf("name: %s\n", thisClient->name);
printf("address: %s\n", thisClient->address);
printf("identifier: %x\n", thisClient->identifier);
printf("file count: %d\n", thisClient->fileCount);
for (fileNum = 0; fileNum < thisClient->fileCount; fileNum++) {
struct file *thisFile = &thisClient.fileList[fileNum];
printf("filename: %s\n", thisFile->fileName);
printf("size: %d\n", thisFile->size);
printf("checksum: %d\n", thisFile->checksum);
thisFile->printed++;
}
thisClient->printed++;
}
关于c - 处理嵌套结构访问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51883764/