我只在一个特定的父活动中使用片段.现在我想知道如果我直接从包含的片段中调用父活动中的方法是否有任何缺点,如下所示:
getActivity().someMethodInParentActivitiy()
更常见的解决方案是在片段中定义正式的侦听器接口以回调父活动,然后使活动实现该接口.
是否有任何原因(例如可靠性或速度)为什么我应该使用第二个更复杂的解决方案而不是从片段到活动的直接方法调用?
使用GCC,我得到以下代码的第二行的"初始化元素不是常量"错误:
uint8_t gBuffer[512 + 4]; /* Data buffer */
uint8_t* gAlignedBuffer = (uint8_t*)(((uint32_t)gBuffer + 4) & 0xFFFFFFFCU); /* Align buffer to 4-byte boundary */
Run Code Online (Sandbox Code Playgroud)
但是,如果我将& 0xFFFFFFFCU 更改 为 + 0xFFFFFFFCU,则代码编译正常:
uint8_t gBuffer[512 + 4]; /* Data buffer */
uint8_t* gAlignedBuffer = (uint8_t*)(((uint32_t)gBuffer + 4) + 0xFFFFFFFCU); /* Align buffer to 4-byte boundary */
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
我正在寻找最优雅的字符串文字实现,其大小在C表中.主要的是我希望编译器在编译时计算sizeof("Some String Literal").
到目前为止,我可以想到以下两种可能性(见下面的代码):
为选项A键入字符串两次.这不是一个好的解决方案,因为如果有许多字符串并且必须更改字符串,则可能出现输入错误.
定义字符串文字,然后在表中使用这些,如选项B所示
还是有更优雅的解决方案?
#define STR_OPTION_B "Option B"
typedef struct
{
enum {
OPTION_A,
OPTION_B
} optionIDs;
char* pString;
int sizeOfString;
}
tTableElement;
tTableElement table[] =
{
{ OPTION_A, "Option A", sizeof("Option A") },
{ OPTION_B, STR_OPTION_B, sizeof(STR_OPTION_B) }
};
Run Code Online (Sandbox Code Playgroud)